summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan <eroelke@gmail.com>2019-11-21 10:23:49 -0700
committerEvan <eroelke@gmail.com>2019-11-21 10:23:49 -0700
commitb18ec47b1393d562655e50d30acb3de191423581 (patch)
tree7959a1477120baf656599794b423aa8cc11ea0c0
parent359d345913d7f5ed36c34ede5476fff946318ffd (diff)
parent2d284654440cb77365639bf107c31b44326362e3 (diff)
fix conflicts
-rw-r--r--asm/battle_bg.s6
-rw-r--r--asm/battle_message.s8
-rw-r--r--asm/clear_save_data_screen.s5
-rw-r--r--asm/evolution_graphics.s1825
-rw-r--r--asm/evolution_scene.s4571
-rw-r--r--asm/fldeff_flash.s10
-rw-r--r--asm/party_menu.s14
-rw-r--r--asm/pokemon_summary_screen.s6
-rw-r--r--baserom.ipsbin298582 -> 248798 bytes
-rw-r--r--common_syms/evolution_scene.txt1
-rw-r--r--data/battle_anim_effects_misc.s1907
-rw-r--r--data/battle_anim_special.s131
-rw-r--r--data/battle_message.s10
-rw-r--r--data/evolution_graphics.s22
-rw-r--r--data/evolution_scene.s33
-rw-r--r--data/field_ground_effect.s51
-rw-r--r--data/field_map_obj.s13
-rw-r--r--data/fldeff_flash.s65
-rw-r--r--data/map_obj_80688E4.s79
-rw-r--r--data/smokescreen.s50
-rw-r--r--data/strings.s14
-rw-r--r--data/tileset_anims.s28
-rw-r--r--graphics/battle_anims/unk_83E4874.binbin0 -> 4096 bytes
-rw-r--r--graphics/battle_anims/unk_83E4874.pngbin0 -> 286 bytes
-rw-r--r--graphics/evolution_scene/bg.binbin0 -> 2048 bytes
-rw-r--r--graphics/evolution_scene/bg.pngbin0 -> 1588 bytes
-rw-r--r--graphics/evolution_scene/bg2.binbin0 -> 2048 bytes
-rw-r--r--graphics/evolution_scene/gray_transition_intro.pal19
-rw-r--r--graphics/evolution_scene/transition.pal35
-rw-r--r--graphics/evolution_scene/unknown_5B4114.pal19
-rw-r--r--graphics/evolution_scene/unref_83F7D80.binbin0 -> 1664 bytes
-rw-r--r--graphics/field_effects/flash_black.pal19
-rw-r--r--graphics/field_effects/flash_effect_map.binbin0 -> 2048 bytes
-rw-r--r--graphics/field_effects/flash_effect_tiles.pngbin0 -> 199 bytes
-rw-r--r--graphics/field_effects/flash_gradient.pal19
-rw-r--r--graphics/field_effects/flash_white.pal19
-rw-r--r--graphics/map_objects/unk_835B988.pal19
-rw-r--r--graphics/misc/evolution_sprite_841EEA4.pngbin0 -> 167 bytes
-rw-r--r--graphics/tileset_anims/anim_0_0.binbin0 -> 128 bytes
-rw-r--r--graphics/tileset_anims/anim_0_1.binbin0 -> 128 bytes
-rw-r--r--graphics/tileset_anims/anim_0_2.binbin0 -> 128 bytes
-rw-r--r--graphics/tileset_anims/anim_0_3.binbin0 -> 128 bytes
-rw-r--r--graphics/tileset_anims/anim_0_4.binbin0 -> 128 bytes
-rw-r--r--graphics/tileset_anims/anim_1_0.binbin0 -> 1536 bytes
-rw-r--r--graphics/tileset_anims/anim_1_1.binbin0 -> 1536 bytes
-rw-r--r--graphics/tileset_anims/anim_1_2.binbin0 -> 1536 bytes
-rw-r--r--graphics/tileset_anims/anim_1_3.binbin0 -> 1536 bytes
-rw-r--r--graphics/tileset_anims/anim_1_4.binbin0 -> 1536 bytes
-rw-r--r--graphics/tileset_anims/anim_1_5.binbin0 -> 1536 bytes
-rw-r--r--graphics/tileset_anims/anim_1_6.binbin0 -> 1536 bytes
-rw-r--r--graphics/tileset_anims/anim_1_7.binbin0 -> 1504 bytes
-rw-r--r--graphics/tileset_anims/anim_2_0.binbin0 -> 576 bytes
-rw-r--r--graphics/tileset_anims/anim_2_1.binbin0 -> 576 bytes
-rw-r--r--graphics/tileset_anims/anim_2_2.binbin0 -> 576 bytes
-rw-r--r--graphics/tileset_anims/anim_2_3.binbin0 -> 576 bytes
-rw-r--r--graphics/tileset_anims/anim_2_4.binbin0 -> 576 bytes
-rw-r--r--graphics/tileset_anims/anim_2_5.binbin0 -> 576 bytes
-rw-r--r--graphics/tileset_anims/anim_2_6.binbin0 -> 576 bytes
-rw-r--r--graphics/tileset_anims/anim_2_7.binbin0 -> 576 bytes
-rw-r--r--graphics/tileset_anims/anim_3_0.binbin0 -> 256 bytes
-rw-r--r--graphics/tileset_anims/anim_3_1.binbin0 -> 256 bytes
-rw-r--r--graphics/tileset_anims/anim_3_2.binbin0 -> 256 bytes
-rw-r--r--graphics/tileset_anims/anim_3_3.binbin0 -> 256 bytes
-rw-r--r--graphics/tileset_anims/anim_3_4.binbin0 -> 256 bytes
-rw-r--r--graphics/tileset_anims/anim_4_0.bin1
-rw-r--r--graphics/tileset_anims/anim_4_1.bin1
-rw-r--r--graphics/tileset_anims/anim_4_2.bin1
-rw-r--r--graphics/tileset_anims/anim_4_3.bin1
-rw-r--r--graphics/tileset_anims/anim_5_0.binbin0 -> 256 bytes
-rw-r--r--graphics/tileset_anims/anim_5_1.binbin0 -> 256 bytes
-rw-r--r--graphics/tileset_anims/anim_5_2.binbin0 -> 256 bytes
-rw-r--r--graphics/tileset_anims/anim_5_3.binbin0 -> 256 bytes
-rw-r--r--graphics/tileset_anims/anim_6_0.binbin0 -> 224 bytes
-rw-r--r--graphics/tileset_anims/anim_6_1.binbin0 -> 224 bytes
-rw-r--r--graphics/tileset_anims/anim_7_0.binbin0 -> 128 bytes
-rw-r--r--graphics/tileset_anims/anim_7_1.binbin0 -> 128 bytes
-rw-r--r--graphics/tileset_anims/anim_7_2.binbin0 -> 128 bytes
-rw-r--r--graphics/unknown/unk_841EF48.pngbin0 -> 230 bytes
-rw-r--r--include/battle_bg.h2
-rw-r--r--include/battle_main.h2
-rw-r--r--include/constants/pokemon.h4
-rw-r--r--include/dynamic_placeholder_text_util.h6
-rw-r--r--include/evolution_graphics.h2
-rw-r--r--include/evolution_scene.h9
-rw-r--r--include/menu_helpers.h2
-rw-r--r--include/pokemon.h2
-rw-r--r--include/pokemon_summary_screen.h2
-rw-r--r--include/sprite.h1
-rw-r--r--include/strings.h13
-rw-r--r--include/trade_scene.h6
-rw-r--r--ld_script.txt10
-rw-r--r--src/battle_main.c6
-rw-r--r--src/battle_script_commands.c4
-rw-r--r--src/berry_pouch.c6
-rw-r--r--src/dark.c2
-rw-r--r--src/evolution_graphics.c638
-rw-r--r--src/evolution_scene.c1569
-rw-r--r--src/ice.c2
-rw-r--r--src/item_pc.c2
-rw-r--r--src/menu_helpers.c6
-rw-r--r--src/new_menu_helpers.c50
-rw-r--r--src/option_menu.c750
-rw-r--r--src/poison.c2
-rw-r--r--src/pokemon.c368
-rw-r--r--src/shop.c58
-rw-r--r--src/tileset_anims.c156
-rw-r--r--src/tm_case.c6
-rw-r--r--src/trade_scene.c12
-rw-r--r--sym_common.txt7
-rw-r--r--sym_ewram.txt14
110 files changed, 4805 insertions, 7916 deletions
diff --git a/asm/battle_bg.s b/asm/battle_bg.s
index 6db40cb4d..79479a49c 100644
--- a/asm/battle_bg.s
+++ b/asm/battle_bg.s
@@ -193,8 +193,8 @@ _0800F344: .4byte gBattleBgTemplates
_0800F348: .4byte gUnknown_8248330
thumb_func_end sub_800F324
- thumb_func_start sub_800F34C
-sub_800F34C: @ 800F34C
+ thumb_func_start InitBattleBgsVideo
+InitBattleBgsVideo: @ 800F34C
push {lr}
movs r0, 0xC5
bl EnableInterrupts
@@ -215,7 +215,7 @@ sub_800F34C: @ 800F34C
bx r0
.align 2, 0
_0800F37C: .4byte 0x0000b040
- thumb_func_end sub_800F34C
+ thumb_func_end InitBattleBgsVideo
thumb_func_start LoadBattleMenuWindowGfx
LoadBattleMenuWindowGfx: @ 800F380
diff --git a/asm/battle_message.s b/asm/battle_message.s
index 6f4cb083c..fc21f17ee 100644
--- a/asm/battle_message.s
+++ b/asm/battle_message.s
@@ -682,7 +682,7 @@ _080D77B8:
_080D77C8: .4byte 0x00000181
_080D77CC: .4byte gDisplayedStringBattle
_080D77D0:
- ldr r1, _080D77F0 @ =gUnknown_83FDF3C
+ ldr r1, _080D77F0 @ =gBattleStringsTable
adds r0, r6, 0
subs r0, 0xC
lsls r0, 2
@@ -700,7 +700,7 @@ _080D77E2:
pop {r0}
bx r0
.align 2, 0
-_080D77F0: .4byte gUnknown_83FDF3C
+_080D77F0: .4byte gBattleStringsTable
thumb_func_end BufferStringBattle
thumb_func_start BattleStringExpandPlaceholdersToDisplayedString
@@ -2230,14 +2230,14 @@ _080D847C:
ldrb r0, [r0, 0x2]
lsls r0, 8
orrs r1, r0
- ldr r0, _080D8494 @ =gUnknown_83FDF3C
+ ldr r0, _080D8494 @ =gBattleStringsTable
subs r1, 0xC
lsls r1, 2
adds r1, r0
ldr r1, [r1]
b _080D868E
.align 2, 0
-_080D8494: .4byte gUnknown_83FDF3C
+_080D8494: .4byte gBattleStringsTable
_080D8498:
ldrb r0, [r4, 0x1]
cmp r0, 0x2
diff --git a/asm/clear_save_data_screen.s b/asm/clear_save_data_screen.s
index 5d9d2ac03..367f12814 100644
--- a/asm/clear_save_data_screen.s
+++ b/asm/clear_save_data_screen.s
@@ -466,9 +466,4 @@ _080F5944: .4byte gUnknown_841EE64
_080F5948: .4byte gUnknown_841EE68
thumb_func_end sub_80F5820
- thumb_func_start nullsub_85
-nullsub_85: @ 80F594C
- bx lr
- thumb_func_end nullsub_85
-
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/evolution_graphics.s b/asm/evolution_graphics.s
deleted file mode 100644
index 64edbdf7a..000000000
--- a/asm/evolution_graphics.s
+++ /dev/null
@@ -1,1825 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start SetEvoSparklesMatrices
-SetEvoSparklesMatrices: @ 80F5950
- push {r4,r5,lr}
- sub sp, 0x4
- movs r4, 0
- ldr r5, _080F5984 @ =gUnknown_841EF10
-_080F5958:
- adds r0, r4, 0
- adds r0, 0x14
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r4, 1
- adds r1, r5
- ldrh r1, [r1]
- str r1, [sp]
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0xB
- bls _080F5958
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5984: .4byte gUnknown_841EF10
- thumb_func_end SetEvoSparklesMatrices
-
- thumb_func_start SpriteCB_PreEvoSparkleSet1
-SpriteCB_PreEvoSparkleSet1: @ 80F5988
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- cmp r0, 0x8
- ble _080F5A36
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- adds r1, r0, 0
- muls r1, r0
- adds r0, r1, 0
- movs r1, 0x50
- bl __divsi3
- movs r1, 0x58
- subs r1, r0
- strh r1, [r4, 0x22]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0
- bge _080F59C2
- adds r0, 0x3
-_080F59C2:
- asrs r0, 2
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x3A]
- adds r0, 0x4
- strh r0, [r4, 0x3A]
- ldrh r1, [r4, 0x3C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F59EC
- ldrh r0, [r4, 0x38]
- subs r0, 0x1
- strh r0, [r4, 0x38]
-_080F59EC:
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- movs r1, 0x26
- ldrsh r0, [r4, r1]
- cmp r0, 0
- ble _080F5A02
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1
- b _080F5A08
-_080F5A02:
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x14
-_080F5A08:
- strb r0, [r1]
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bge _080F5A14
- adds r0, 0x3
-_080F5A14:
- asrs r0, 2
- adds r0, 0x14
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1F
- bls _080F5A22
- movs r2, 0x1F
-_080F5A22:
- movs r0, 0x1F
- ands r2, r0
- lsls r2, 1
- ldrb r1, [r4, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x3]
- b _080F5A3C
-_080F5A36:
- adds r0, r4, 0
- bl DestroySprite
-_080F5A3C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_PreEvoSparkleSet1
-
- thumb_func_start CreatePreEvoSparkleSet1
-CreatePreEvoSparkleSet1: @ 80F5A44
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080F5A94 @ =gUnknown_841EEF8
- movs r1, 0x78
- movs r2, 0x58
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080F5A8E
- ldr r4, _080F5A98 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r2, r3, r4
- movs r1, 0
- movs r0, 0x30
- strh r0, [r2, 0x38]
- strh r5, [r2, 0x3A]
- strh r1, [r2, 0x3C]
- ldrb r1, [r2, 0x1]
- subs r0, 0x34
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r2, 0x3]
- movs r1, 0x3E
- orrs r0, r1
- strb r0, [r2, 0x3]
- adds r4, 0x1C
- adds r3, r4
- ldr r0, _080F5A9C @ =SpriteCB_PreEvoSparkleSet1
- str r0, [r3]
-_080F5A8E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5A94: .4byte gUnknown_841EEF8
-_080F5A98: .4byte gSprites
-_080F5A9C: .4byte SpriteCB_PreEvoSparkleSet1
- thumb_func_end CreatePreEvoSparkleSet1
-
- thumb_func_start SpriteCB_PreEvoSparkleSet2
-SpriteCB_PreEvoSparkleSet2: @ 80F5AA0
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- cmp r0, 0x57
- bgt _080F5B06
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- adds r1, r0, 0
- muls r1, r0
- adds r0, r1, 0
- movs r1, 0x5
- bl __divsi3
- adds r0, 0x8
- strh r0, [r4, 0x22]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0
- bge _080F5AD8
- adds r0, 0x3
-_080F5AD8:
- asrs r0, 2
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x24]
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- lsls r0, 26
- lsrs r0, 24
- movs r1, 0x28
- bl Sin
- adds r0, 0x8
- strh r0, [r4, 0x38]
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- b _080F5B0C
-_080F5B06:
- adds r0, r4, 0
- bl DestroySprite
-_080F5B0C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_PreEvoSparkleSet2
-
- thumb_func_start CreatePreEvoSparkleSet2
-CreatePreEvoSparkleSet2: @ 80F5B14
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080F5B70 @ =gUnknown_841EEF8
- movs r1, 0x78
- movs r2, 0x8
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080F5B6A
- ldr r4, _080F5B74 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r2, r3, r4
- movs r1, 0
- movs r0, 0x8
- strh r0, [r2, 0x38]
- strh r5, [r2, 0x3A]
- strh r1, [r2, 0x3C]
- ldrb r1, [r2, 0x1]
- subs r0, 0xC
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r1, [r2, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- movs r1, 0x32
- orrs r0, r1
- strb r0, [r2, 0x3]
- adds r2, 0x43
- movs r0, 0x1
- strb r0, [r2]
- adds r4, 0x1C
- adds r3, r4
- ldr r0, _080F5B78 @ =SpriteCB_PreEvoSparkleSet2
- str r0, [r3]
-_080F5B6A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5B70: .4byte gUnknown_841EEF8
-_080F5B74: .4byte gSprites
-_080F5B78: .4byte SpriteCB_PreEvoSparkleSet2
- thumb_func_end CreatePreEvoSparkleSet2
-
- thumb_func_start SpriteCB_PostEvoSparkleSet1
-SpriteCB_PostEvoSparkleSet1: @ 80F5B7C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- cmp r0, 0x8
- ble _080F5BB8
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x38]
- ldrh r1, [r4, 0x34]
- subs r0, r1
- strh r0, [r4, 0x38]
- ldrh r0, [r4, 0x3A]
- adds r0, 0x4
- strh r0, [r4, 0x3A]
- b _080F5BBE
-_080F5BB8:
- adds r0, r4, 0
- bl DestroySprite
-_080F5BBE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_PostEvoSparkleSet1
-
- thumb_func_start CreatePostEvoSparkleSet1
-CreatePostEvoSparkleSet1: @ 80F5BC4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, _080F5C20 @ =gUnknown_841EEF8
- movs r1, 0x78
- movs r2, 0x38
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080F5C1A
- ldr r4, _080F5C24 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r2, r3, r4
- movs r1, 0
- strh r5, [r2, 0x34]
- movs r0, 0x78
- strh r0, [r2, 0x38]
- strh r6, [r2, 0x3A]
- strh r1, [r2, 0x3C]
- ldrb r1, [r2, 0x1]
- subs r0, 0x7C
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r2, 0x3]
- movs r1, 0x3E
- orrs r0, r1
- strb r0, [r2, 0x3]
- adds r2, 0x43
- movs r0, 0x1
- strb r0, [r2]
- adds r4, 0x1C
- adds r3, r4
- ldr r0, _080F5C28 @ =SpriteCB_PostEvoSparkleSet1
- str r0, [r3]
-_080F5C1A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5C20: .4byte gUnknown_841EEF8
-_080F5C24: .4byte gSprites
-_080F5C28: .4byte SpriteCB_PostEvoSparkleSet1
- thumb_func_end CreatePostEvoSparkleSet1
-
- thumb_func_start SpriteCB_PostEvoSparkleSet2
-SpriteCB_PostEvoSparkleSet2: @ 80F5C2C
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x3C]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- bne _080F5C40
- ldrh r0, [r4, 0x22]
- adds r0, 0x1
- strh r0, [r4, 0x22]
-_080F5C40:
- ldrh r1, [r4, 0x3A]
- movs r2, 0x3A
- ldrsh r0, [r4, r2]
- cmp r0, 0x7F
- bgt _080F5CF0
- lsls r0, r1, 24
- lsrs r0, 24
- movs r5, 0x38
- ldrsh r1, [r4, r5]
- bl Sin
- negs r0, r0
- strh r0, [r4, 0x26]
- movs r0, 0x34
- ldrsh r1, [r4, r0]
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- muls r0, r1
- movs r1, 0x3
- bl __divsi3
- adds r0, 0x78
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x3A]
- adds r3, r0, 0x1
- strh r3, [r4, 0x3A]
- movs r5, 0x3A
- ldrsh r1, [r4, r5]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- cmp r0, 0
- bge _080F5C84
- adds r0, 0x7F
-_080F5C84:
- asrs r0, 7
- movs r1, 0x1F
- subs r1, r0
- lsls r1, 24
- lsrs r2, r1, 24
- lsls r0, r3, 16
- asrs r0, 16
- cmp r0, 0x40
- ble _080F5CA0
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1
- strb r0, [r1]
- b _080F5CD0
-_080F5CA0:
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x14
- strb r0, [r1]
- ldrh r1, [r4, 0x3A]
- movs r5, 0x3A
- ldrsh r0, [r4, r5]
- cmp r0, 0x70
- ble _080F5CD0
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F5CD0
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
-_080F5CD0:
- cmp r2, 0x13
- bhi _080F5CD6
- movs r2, 0x14
-_080F5CD6:
- movs r0, 0x1F
- ands r2, r0
- lsls r2, 1
- ldrb r1, [r4, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x3]
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- b _080F5CF6
-_080F5CF0:
- adds r0, r4, 0
- bl DestroySprite
-_080F5CF6:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_PostEvoSparkleSet2
-
- thumb_func_start CreatePostEvoSparkleSet2
-CreatePostEvoSparkleSet2: @ 80F5CFC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- ldr r0, _080F5D78 @ =gUnknown_841EEF8
- movs r1, 0x78
- movs r2, 0x38
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x40
- beq _080F5D6C
- bl Random
- ldr r6, _080F5D7C @ =gSprites
- lsls r5, r4, 4
- adds r5, r4
- lsls r5, 2
- adds r4, r5, r6
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x7
- bl __umodsi3
- movs r1, 0x3
- subs r1, r0
- movs r0, 0
- mov r8, r0
- strh r1, [r4, 0x34]
- bl Random
- movs r1, 0x3F
- ands r1, r0
- adds r1, 0x30
- strh r1, [r4, 0x38]
- mov r0, r8
- strh r0, [r4, 0x3C]
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x3]
- movs r1, 0x3E
- orrs r0, r1
- strb r0, [r4, 0x3]
- adds r4, 0x43
- movs r0, 0x14
- strb r0, [r4]
- adds r6, 0x1C
- adds r5, r6
- ldr r0, _080F5D80 @ =SpriteCB_PostEvoSparkleSet2
- str r0, [r5]
-_080F5D6C:
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5D78: .4byte gUnknown_841EEF8
-_080F5D7C: .4byte gSprites
-_080F5D80: .4byte SpriteCB_PostEvoSparkleSet2
- thumb_func_end CreatePostEvoSparkleSet2
-
- thumb_func_start LoadEvoSparkleSpriteAndPal
-LoadEvoSparkleSpriteAndPal: @ 80F5D84
- push {lr}
- ldr r0, _080F5D98 @ =gUnknown_841EEC4
- bl LoadCompressedSpriteSheetUsingHeap
- ldr r0, _080F5D9C @ =gUnknown_841EED4
- bl LoadSpritePalettes
- pop {r0}
- bx r0
- .align 2, 0
-_080F5D98: .4byte gUnknown_841EEC4
-_080F5D9C: .4byte gUnknown_841EED4
- thumb_func_end LoadEvoSparkleSpriteAndPal
-
- thumb_func_start LaunchTask_PreEvoSparklesSet1
-LaunchTask_PreEvoSparklesSet1: @ 80F5DA0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _080F5DC8 @ =sub_80F5DD0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080F5DCC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xA]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080F5DC8: .4byte sub_80F5DD0
-_080F5DCC: .4byte gTasks
- thumb_func_end LaunchTask_PreEvoSparklesSet1
-
- thumb_func_start sub_80F5DD0
-sub_80F5DD0: @ 80F5DD0
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl SetEvoSparklesMatrices
- ldr r0, _080F5E14 @ =gTasks
- lsls r5, r4, 2
- adds r5, r4
- lsls r5, 3
- adds r5, r0
- movs r0, 0
- strh r0, [r5, 0x26]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x3
- lsls r0, r1
- ldr r1, _080F5E18 @ =0x00007fff
- str r1, [sp]
- movs r1, 0xA
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _080F5E1C @ =EvoTask_CreatePreEvoSparkleSet1
- str r0, [r5]
- movs r0, 0x85
- bl PlaySE
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5E14: .4byte gTasks
-_080F5E18: .4byte 0x00007fff
-_080F5E1C: .4byte EvoTask_CreatePreEvoSparkleSet1
- thumb_func_end sub_80F5DD0
-
- thumb_func_start EvoTask_CreatePreEvoSparkleSet1
-EvoTask_CreatePreEvoSparkleSet1: @ 80F5E20
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080F5E78 @ =gTasks
- lsls r3, r5, 2
- adds r0, r3, r5
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0x26]
- movs r4, 0x26
- ldrsh r0, [r1, r4]
- cmp r0, 0x3F
- bgt _080F5E7C
- movs r0, 0x7
- ands r0, r2
- adds r7, r3, 0
- cmp r0, 0
- bne _080F5E66
- movs r4, 0
- adds r6, r1, 0
-_080F5E48:
- ldrh r1, [r6, 0x26]
- movs r0, 0x78
- ands r0, r1
- lsls r0, 1
- lsls r1, r4, 6
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl CreatePreEvoSparkleSet1
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _080F5E48
-_080F5E66:
- ldr r0, _080F5E78 @ =gTasks
- adds r1, r7, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _080F5E84
- .align 2, 0
-_080F5E78: .4byte gTasks
-_080F5E7C:
- movs r0, 0x60
- strh r0, [r1, 0x26]
- ldr r0, _080F5E8C @ =EvoTask_WaitForPre1SparklesToGoUp
- str r0, [r1]
-_080F5E84:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5E8C: .4byte EvoTask_WaitForPre1SparklesToGoUp
- thumb_func_end EvoTask_CreatePreEvoSparkleSet1
-
- thumb_func_start EvoTask_WaitForPre1SparklesToGoUp
-EvoTask_WaitForPre1SparklesToGoUp: @ 80F5E90
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _080F5EB0 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0, r1
- ldrh r3, [r1, 0x26]
- movs r4, 0x26
- ldrsh r0, [r1, r4]
- cmp r0, 0
- beq _080F5EB4
- subs r0, r3, 0x1
- strh r0, [r1, 0x26]
- b _080F5EBA
- .align 2, 0
-_080F5EB0: .4byte gTasks
-_080F5EB4:
- adds r0, r2, 0
- bl DestroyTask
-_080F5EBA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end EvoTask_WaitForPre1SparklesToGoUp
-
- thumb_func_start sub_80F5EC0
-sub_80F5EC0: @ 80F5EC0
- push {lr}
- ldr r0, _080F5ED4 @ =sub_80F5ED8
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_080F5ED4: .4byte sub_80F5ED8
- thumb_func_end sub_80F5EC0
-
- thumb_func_start sub_80F5ED8
-sub_80F5ED8: @ 80F5ED8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl SetEvoSparklesMatrices
- ldr r1, _080F5F04 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x26]
- ldr r1, _080F5F08 @ =EvoTask_CreatePreEvoSparklesSet2
- str r1, [r0]
- movs r0, 0xB0
- bl PlaySE
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5F04: .4byte gTasks
-_080F5F08: .4byte EvoTask_CreatePreEvoSparklesSet2
- thumb_func_end sub_80F5ED8
-
- thumb_func_start EvoTask_CreatePreEvoSparklesSet2
-EvoTask_CreatePreEvoSparklesSet2: @ 80F5F0C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080F5F50 @ =gTasks
- lsls r2, r5, 2
- adds r0, r2, r5
- lsls r0, 3
- adds r1, r0, r1
- movs r3, 0x26
- ldrsh r0, [r1, r3]
- cmp r0, 0x5F
- bgt _080F5F54
- adds r6, r2, 0
- cmp r0, 0x5
- bgt _080F5F3E
- movs r4, 0
-_080F5F2C:
- lsls r0, r4, 28
- lsrs r0, 24
- bl CreatePreEvoSparkleSet2
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x8
- bls _080F5F2C
-_080F5F3E:
- ldr r0, _080F5F50 @ =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _080F5F58
- .align 2, 0
-_080F5F50: .4byte gTasks
-_080F5F54:
- ldr r0, _080F5F60 @ =sub_80F5F64
- str r0, [r1]
-_080F5F58:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5F60: .4byte sub_80F5F64
- thumb_func_end EvoTask_CreatePreEvoSparklesSet2
-
- thumb_func_start sub_80F5F64
-sub_80F5F64: @ 80F5F64
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- pop {r0}
- bx r0
- thumb_func_end sub_80F5F64
-
- thumb_func_start sub_80F5F74
-sub_80F5F74: @ 80F5F74
- push {lr}
- ldr r0, _080F5F88 @ =sub_80F5F8C
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_080F5F88: .4byte sub_80F5F8C
- thumb_func_end sub_80F5F74
-
- thumb_func_start sub_80F5F8C
-sub_80F5F8C: @ 80F5F8C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl SetEvoSparklesMatrices
- ldr r1, _080F5FB8 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x26]
- ldr r1, _080F5FBC @ =EvoTask_CreatePostEvoSparklesSet1
- str r1, [r0]
- movs r0, 0x5F
- bl PlaySE
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F5FB8: .4byte gTasks
-_080F5FBC: .4byte EvoTask_CreatePostEvoSparklesSet1
- thumb_func_end sub_80F5F8C
-
- thumb_func_start EvoTask_CreatePostEvoSparklesSet1
-EvoTask_CreatePostEvoSparklesSet1: @ 80F5FC0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080F602C @ =gTasks
- lsls r2, r5, 2
- adds r0, r2, r5
- lsls r0, 3
- adds r1, r0, r1
- movs r3, 0x26
- ldrsh r0, [r1, r3]
- cmp r0, 0x2F
- bgt _080F6030
- adds r6, r2, 0
- cmp r0, 0
- bne _080F5FF4
- movs r4, 0
-_080F5FE0:
- lsls r0, r4, 28
- lsrs r0, 24
- movs r1, 0x4
- bl CreatePostEvoSparkleSet1
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _080F5FE0
-_080F5FF4:
- ldr r0, _080F602C @ =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
- movs r2, 0x26
- ldrsh r0, [r1, r2]
- cmp r0, 0x20
- bne _080F601A
- movs r4, 0
-_080F6006:
- lsls r0, r4, 28
- lsrs r0, 24
- movs r1, 0x8
- bl CreatePostEvoSparkleSet1
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _080F6006
-_080F601A:
- ldr r0, _080F602C @ =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _080F6034
- .align 2, 0
-_080F602C: .4byte gTasks
-_080F6030:
- ldr r0, _080F603C @ =sub_80F6040
- str r0, [r1]
-_080F6034:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F603C: .4byte sub_80F6040
- thumb_func_end EvoTask_CreatePostEvoSparklesSet1
-
- thumb_func_start sub_80F6040
-sub_80F6040: @ 80F6040
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- pop {r0}
- bx r0
- thumb_func_end sub_80F6040
-
- thumb_func_start LaunchTask_PostEvoSparklesSet2AndFlash
-LaunchTask_PostEvoSparklesSet2AndFlash: @ 80F6050
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _080F6078 @ =sub_80F6080
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080F607C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xC]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080F6078: .4byte sub_80F6080
-_080F607C: .4byte gTasks
- thumb_func_end LaunchTask_PostEvoSparklesSet2AndFlash
-
- thumb_func_start sub_80F6080
-sub_80F6080: @ 80F6080
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl SetEvoSparklesMatrices
- ldr r0, _080F60CC @ =gTasks
- lsls r5, r4, 2
- adds r5, r4
- lsls r5, 3
- adds r5, r0
- movs r0, 0
- strh r0, [r5, 0x26]
- bl sub_80D0474
- ldr r0, _080F60D0 @ =gPlttBufferFaded + 0x40
- ldr r1, _080F60D4 @ =gPlttBufferUnfaded + 0x40
- movs r2, 0x30
- bl CpuSet
- ldr r0, _080F60D8 @ =0xfff90f1c
- ldr r1, _080F60DC @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _080F60E0 @ =sub_80F60E4
- str r0, [r5]
- movs r0, 0xC3
- bl PlaySE
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F60CC: .4byte gTasks
-_080F60D0: .4byte gPlttBufferFaded + 0x40
-_080F60D4: .4byte gPlttBufferUnfaded + 0x40
-_080F60D8: .4byte 0xfff90f1c
-_080F60DC: .4byte 0x00007fff
-_080F60E0: .4byte sub_80F60E4
- thumb_func_end sub_80F6080
-
- thumb_func_start sub_80F60E4
-sub_80F60E4: @ 80F60E4
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _080F611C @ =gTasks
- lsls r5, r6, 2
- adds r0, r5, r6
- lsls r0, 3
- adds r1, r0, r1
- movs r0, 0x26
- ldrsh r2, [r1, r0]
- cmp r2, 0x7F
- bgt _080F6160
- adds r0, r2, 0
- cmp r0, 0
- beq _080F6120
- cmp r0, 0x20
- beq _080F6134
- cmp r2, 0x31
- bgt _080F6144
- bl Random
- movs r1, 0x7
- ands r0, r1
- bl CreatePostEvoSparkleSet2
- b _080F6144
- .align 2, 0
-_080F611C: .4byte gTasks
-_080F6120:
- movs r4, 0
-_080F6122:
- adds r0, r4, 0
- bl CreatePostEvoSparkleSet2
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _080F6122
- b _080F6144
-_080F6134:
- ldr r0, _080F6154 @ =0xffff0f1c
- ldr r1, _080F6158 @ =0x00007fff
- str r1, [sp]
- movs r1, 0x10
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_080F6144:
- ldr r0, _080F615C @ =gTasks
- adds r1, r5, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _080F6164
- .align 2, 0
-_080F6154: .4byte 0xffff0f1c
-_080F6158: .4byte 0x00007fff
-_080F615C: .4byte gTasks
-_080F6160:
- ldr r0, _080F616C @ =sub_80F6170
- str r0, [r1]
-_080F6164:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F616C: .4byte sub_80F6170
- thumb_func_end sub_80F60E4
-
- thumb_func_start sub_80F6170
-sub_80F6170: @ 80F6170
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _080F618C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080F6188
- adds r0, r2, 0
- bl DestroyTask
-_080F6188:
- pop {r0}
- bx r0
- .align 2, 0
-_080F618C: .4byte gPaletteFade
- thumb_func_end sub_80F6170
-
- thumb_func_start sub_80F6190
-sub_80F6190: @ 80F6190
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _080F61B8 @ =sub_80F61C0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080F61BC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xC]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080F61B8: .4byte sub_80F61C0
-_080F61BC: .4byte gTasks
- thumb_func_end sub_80F6190
-
- thumb_func_start sub_80F61C0
-sub_80F61C0: @ 80F61C0
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl SetEvoSparklesMatrices
- ldr r0, _080F620C @ =gTasks
- lsls r5, r4, 2
- adds r5, r4
- lsls r5, 3
- adds r5, r0
- movs r0, 0
- strh r0, [r5, 0x26]
- bl sub_80D0474
- ldr r0, _080F6210 @ =gPlttBufferFaded + 0x40
- ldr r1, _080F6214 @ =gPlttBufferUnfaded + 0x40
- movs r2, 0x30
- bl CpuSet
- ldr r0, _080F6218 @ =0xfff90f00
- ldr r1, _080F621C @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _080F6220 @ =sub_80F6224
- str r0, [r5]
- movs r0, 0xC3
- bl PlaySE
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F620C: .4byte gTasks
-_080F6210: .4byte gPlttBufferFaded + 0x40
-_080F6214: .4byte gPlttBufferUnfaded + 0x40
-_080F6218: .4byte 0xfff90f00
-_080F621C: .4byte 0x00007fff
-_080F6220: .4byte sub_80F6224
- thumb_func_end sub_80F61C0
-
- thumb_func_start sub_80F6224
-sub_80F6224: @ 80F6224
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _080F625C @ =gTasks
- lsls r5, r6, 2
- adds r0, r5, r6
- lsls r0, 3
- adds r1, r0, r1
- movs r0, 0x26
- ldrsh r2, [r1, r0]
- cmp r2, 0x7F
- bgt _080F62A0
- adds r0, r2, 0
- cmp r0, 0
- beq _080F6260
- cmp r0, 0x20
- beq _080F6274
- cmp r2, 0x31
- bgt _080F6284
- bl Random
- movs r1, 0x7
- ands r0, r1
- bl CreatePostEvoSparkleSet2
- b _080F6284
- .align 2, 0
-_080F625C: .4byte gTasks
-_080F6260:
- movs r4, 0
-_080F6262:
- adds r0, r4, 0
- bl CreatePostEvoSparkleSet2
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _080F6262
- b _080F6284
-_080F6274:
- ldr r0, _080F6294 @ =0xffff0f00
- ldr r1, _080F6298 @ =0x00007fff
- str r1, [sp]
- movs r1, 0x10
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_080F6284:
- ldr r0, _080F629C @ =gTasks
- adds r1, r5, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _080F62A4
- .align 2, 0
-_080F6294: .4byte 0xffff0f00
-_080F6298: .4byte 0x00007fff
-_080F629C: .4byte gTasks
-_080F62A0:
- ldr r0, _080F62AC @ =sub_80F6170
- str r0, [r1]
-_080F62A4:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F62AC: .4byte sub_80F6170
- thumb_func_end sub_80F6224
-
- thumb_func_start nullsub_86
-nullsub_86: @ 80F62B0
- bx lr
- thumb_func_end nullsub_86
-
- thumb_func_start sub_80F62B4
-sub_80F62B4: @ 80F62B4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x28
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- movs r1, 0
- ldr r3, _080F63E8 @ =sub_80F6400
- ldr r2, _080F63EC @ =0x00007fff
-_080F62CE:
- lsls r0, r1, 1
- add r0, sp
- adds r0, 0x4
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0xF
- bls _080F62CE
- adds r0, r3, 0
- movs r1, 0
- bl CreateTask
- mov r8, r0
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _080F63F0 @ =gTasks
- mov r1, r8
- lsls r6, r1, 2
- add r6, r8
- lsls r6, 3
- adds r6, r0
- strh r5, [r6, 0xA]
- strh r7, [r6, 0xC]
- movs r1, 0x80
- lsls r1, 1
- strh r1, [r6, 0xE]
- movs r0, 0x10
- strh r0, [r6, 0x10]
- movs r4, 0x80
- lsls r4, 9
- str r1, [sp]
- movs r0, 0x1E
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- movs r0, 0x10
- ldrsh r1, [r6, r0]
- adds r0, r4, 0
- bl __divsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r0, 0x1F
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- ldr r1, _080F63F4 @ =gSprites
- mov r9, r1
- lsls r2, r5, 4
- adds r2, r5
- lsls r2, 2
- mov r3, r9
- adds r3, 0x1C
- adds r0, r2, r3
- ldr r1, _080F63F8 @ =nullsub_86
- str r1, [r0]
- add r2, r9
- ldrb r1, [r2, 0x1]
- movs r4, 0x4
- negs r4, r4
- adds r0, r4, 0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r1, [r2, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- movs r1, 0x3C
- orrs r0, r1
- strb r0, [r2, 0x3]
- movs r0, 0x3E
- adds r0, r2
- mov r10, r0
- ldrb r1, [r0]
- movs r5, 0x5
- negs r5, r5
- adds r0, r5, 0
- ands r0, r1
- mov r1, r10
- strb r0, [r1]
- ldrb r1, [r2, 0x5]
- lsrs r1, 4
- lsls r1, 5
- ldr r0, _080F63FC @ =gPlttBufferFaded + 0x200
- mov r10, r0
- add r1, r10
- add r0, sp, 0x4
- movs r2, 0x10
- str r3, [sp, 0x24]
- bl CpuSet
- lsls r1, r7, 4
- adds r1, r7
- lsls r1, 2
- ldr r3, [sp, 0x24]
- adds r3, r1, r3
- ldr r0, _080F63F8 @ =nullsub_86
- str r0, [r3]
- add r1, r9
- ldrb r0, [r1, 0x1]
- ands r4, r0
- movs r0, 0x1
- orrs r4, r0
- strb r4, [r1, 0x1]
- ldrb r0, [r1, 0x3]
- movs r2, 0x3E
- orrs r0, r2
- strb r0, [r1, 0x3]
- adds r2, r1, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- ands r5, r0
- strb r5, [r2]
- ldrb r1, [r1, 0x5]
- lsrs r1, 4
- lsls r1, 5
- add r1, r10
- add r0, sp, 0x4
- movs r2, 0x10
- bl CpuSet
- movs r1, 0
- strh r1, [r6, 0x18]
- mov r0, r8
- add sp, 0x28
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080F63E8: .4byte sub_80F6400
-_080F63EC: .4byte 0x00007fff
-_080F63F0: .4byte gTasks
-_080F63F4: .4byte gSprites
-_080F63F8: .4byte nullsub_86
-_080F63FC: .4byte gPlttBufferFaded + 0x200
- thumb_func_end sub_80F62B4
-
- thumb_func_start sub_80F6400
-sub_80F6400: @ 80F6400
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080F641C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x12]
- movs r0, 0x8
- strh r0, [r1, 0x14]
- ldr r0, _080F6420 @ =sub_80F6424
- str r0, [r1]
- bx lr
- .align 2, 0
-_080F641C: .4byte gTasks
-_080F6420: .4byte sub_80F6424
- thumb_func_end sub_80F6400
-
- thumb_func_start sub_80F6424
-sub_80F6424: @ 80F6424
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r1, _080F6444 @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r2, r0, r1
- movs r1, 0x18
- ldrsh r0, [r2, r1]
- cmp r0, 0
- beq _080F6448
- adds r0, r3, 0
- bl PreEvoVisible_PostEvoInvisible_KillTask
- b _080F646A
- .align 2, 0
-_080F6444: .4byte gTasks
-_080F6448:
- ldrh r1, [r2, 0x14]
- movs r4, 0x14
- ldrsh r0, [r2, r4]
- cmp r0, 0x80
- bne _080F645A
- adds r0, r3, 0
- bl PreEvoInvisible_PostEvoVisible_KillTask
- b _080F646A
-_080F645A:
- adds r0, r1, 0x2
- strh r0, [r2, 0x14]
- ldrh r0, [r2, 0x12]
- movs r1, 0x1
- eors r0, r1
- strh r0, [r2, 0x12]
- ldr r0, _080F6470 @ =sub_80F6474
- str r0, [r2]
-_080F646A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F6470: .4byte sub_80F6474
- thumb_func_end sub_80F6424
-
- thumb_func_start sub_80F6474
-sub_80F6474: @ 80F6474
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _080F6498 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r2, r0, r1
- movs r3, 0x18
- ldrsh r0, [r2, r3]
- adds r5, r1, 0
- cmp r0, 0
- beq _080F64A0
- ldr r0, _080F649C @ =PreEvoVisible_PostEvoInvisible_KillTask
- str r0, [r2]
- b _080F6584
- .align 2, 0
-_080F6498: .4byte gTasks
-_080F649C: .4byte PreEvoVisible_PostEvoInvisible_KillTask
-_080F64A0:
- movs r6, 0
- movs r7, 0x12
- ldrsh r0, [r2, r7]
- cmp r0, 0
- bne _080F64F0
- movs r0, 0xE
- ldrsh r1, [r2, r0]
- movs r3, 0x14
- ldrsh r0, [r2, r3]
- movs r3, 0x80
- lsls r3, 1
- subs r0, r3, r0
- cmp r1, r0
- bge _080F64C6
- ldrh r0, [r2, 0x14]
- ldrh r7, [r2, 0xE]
- adds r0, r7
- strh r0, [r2, 0xE]
- b _080F64CA
-_080F64C6:
- strh r3, [r2, 0xE]
- movs r6, 0x1
-_080F64CA:
- lsls r2, r4, 2
- adds r0, r2, r4
- lsls r0, 3
- adds r3, r0, r5
- movs r0, 0x10
- ldrsh r1, [r3, r0]
- movs r7, 0x14
- ldrsh r0, [r3, r7]
- adds r0, 0x10
- cmp r1, r0
- ble _080F64EA
- ldrh r0, [r3, 0x10]
- ldrh r1, [r3, 0x14]
- subs r0, r1
- strh r0, [r3, 0x10]
- b _080F653A
-_080F64EA:
- movs r0, 0x10
- strh r0, [r3, 0x10]
- b _080F6534
-_080F64F0:
- movs r0, 0x10
- ldrsh r1, [r2, r0]
- movs r3, 0x14
- ldrsh r0, [r2, r3]
- movs r3, 0x80
- lsls r3, 1
- subs r0, r3, r0
- cmp r1, r0
- bge _080F650C
- ldrh r0, [r2, 0x14]
- ldrh r7, [r2, 0x10]
- adds r0, r7
- strh r0, [r2, 0x10]
- b _080F6510
-_080F650C:
- strh r3, [r2, 0x10]
- movs r6, 0x1
-_080F6510:
- lsls r2, r4, 2
- adds r0, r2, r4
- lsls r0, 3
- adds r3, r0, r5
- movs r0, 0xE
- ldrsh r1, [r3, r0]
- movs r7, 0x14
- ldrsh r0, [r3, r7]
- adds r0, 0x10
- cmp r1, r0
- ble _080F6530
- ldrh r0, [r3, 0xE]
- ldrh r1, [r3, 0x14]
- subs r0, r1
- strh r0, [r3, 0xE]
- b _080F653A
-_080F6530:
- movs r0, 0x10
- strh r0, [r3, 0xE]
-_080F6534:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_080F653A:
- adds r0, r2, r4
- lsls r0, 3
- adds r5, r0, r5
- movs r0, 0xE
- ldrsh r1, [r5, r0]
- movs r4, 0x80
- lsls r4, 9
- adds r0, r4, 0
- bl __divsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r0, 0x1E
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- movs r3, 0x10
- ldrsh r1, [r5, r3]
- adds r0, r4, 0
- bl __divsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r0, 0x1F
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- cmp r6, 0x2
- bne _080F6584
- ldr r0, _080F658C @ =sub_80F6424
- str r0, [r5]
-_080F6584:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F658C: .4byte sub_80F6424
- thumb_func_end sub_80F6474
-
- thumb_func_start PreEvoInvisible_PostEvoVisible_KillTask
-PreEvoInvisible_PostEvoVisible_KillTask: @ 80F6590
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080F6638 @ =gSprites
- mov r8, r1
- ldr r1, _080F663C @ =gTasks
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- adds r4, r1
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- add r2, r8
- ldrb r3, [r2, 0x1]
- movs r6, 0x4
- negs r6, r6
- adds r1, r6, 0
- ands r1, r3
- strb r1, [r2, 0x1]
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- add r2, r8
- ldrb r3, [r2, 0x3]
- movs r5, 0x3F
- negs r5, r5
- adds r1, r5, 0
- ands r1, r3
- strb r1, [r2, 0x3]
- movs r1, 0xA
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r3, 0x4
- orrs r2, r3
- strb r2, [r1]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r2, [r1, 0x1]
- ands r6, r2
- strb r6, [r1, 0x1]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r2, [r1, 0x3]
- ands r5, r2
- strb r5, [r1, 0x3]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- adds r1, 0x3E
- ldrb r3, [r1]
- movs r2, 0x5
- negs r2, r2
- ands r2, r3
- strb r2, [r1]
- bl DestroyTask
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F6638: .4byte gSprites
-_080F663C: .4byte gTasks
- thumb_func_end PreEvoInvisible_PostEvoVisible_KillTask
-
- thumb_func_start PreEvoVisible_PostEvoInvisible_KillTask
-PreEvoVisible_PostEvoInvisible_KillTask: @ 80F6640
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080F66E8 @ =gSprites
- mov r8, r1
- ldr r1, _080F66EC @ =gTasks
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- adds r4, r1
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- add r2, r8
- ldrb r3, [r2, 0x1]
- movs r6, 0x4
- negs r6, r6
- adds r1, r6, 0
- ands r1, r3
- strb r1, [r2, 0x1]
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- add r2, r8
- ldrb r3, [r2, 0x3]
- movs r5, 0x3F
- negs r5, r5
- adds r1, r5, 0
- ands r1, r3
- strb r1, [r2, 0x3]
- movs r1, 0xA
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- adds r1, 0x3E
- ldrb r3, [r1]
- movs r2, 0x5
- negs r2, r2
- ands r2, r3
- strb r2, [r1]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r2, [r1, 0x1]
- ands r6, r2
- strb r6, [r1, 0x1]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r2, [r1, 0x3]
- ands r5, r2
- strb r5, [r1, 0x3]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r3, 0x4
- orrs r2, r3
- strb r2, [r1]
- bl DestroyTask
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F66E8: .4byte gSprites
-_080F66EC: .4byte gTasks
- thumb_func_end PreEvoVisible_PostEvoInvisible_KillTask
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s
deleted file mode 100644
index dac85320e..000000000
--- a/asm/evolution_scene.s
+++ /dev/null
@@ -1,4571 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80CDD18
-sub_80CDD18: @ 80CDD18
- push {lr}
- bl UpdatePaletteFade
- bl RunTasks
- pop {r0}
- bx r0
- thumb_func_end sub_80CDD18
-
- thumb_func_start Task_BeginEvolutionScene
-Task_BeginEvolutionScene: @ 80CDD28
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- movs r7, 0
- ldr r1, _080CDD4C @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r6, r0, r1
- movs r1, 0x8
- ldrsh r0, [r6, r1]
- cmp r0, 0
- beq _080CDD50
- cmp r0, 0x1
- beq _080CDD68
- b _080CDD98
- .align 2, 0
-_080CDD4C: .4byte gTasks
-_080CDD50:
- movs r0, 0x1
- negs r0, r0
- str r7, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- b _080CDD98
-_080CDD68:
- ldr r0, _080CDDA0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080CDD98
- movs r0, 0x1C
- ldrsh r1, [r6, r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080CDDA4 @ =gPlayerParty
- adds r7, r1, r0
- ldrh r4, [r6, 0xC]
- ldrb r5, [r6, 0xE]
- ldrb r6, [r6, 0x1C]
- adds r0, r2, 0
- bl DestroyTask
- adds r0, r7, 0
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl EvolutionScene
-_080CDD98:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CDDA0: .4byte gPaletteFade
-_080CDDA4: .4byte gPlayerParty
- thumb_func_end Task_BeginEvolutionScene
-
- thumb_func_start BeginEvolutionScene
-BeginEvolutionScene: @ 80CDDA8
- push {r4-r6,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- adds r6, r3, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- ldr r0, _080CDDE8 @ =Task_BeginEvolutionScene
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080CDDEC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x8]
- strh r4, [r1, 0xC]
- strh r5, [r1, 0xE]
- strh r6, [r1, 0x1C]
- ldr r0, _080CDDF0 @ =sub_80CDD18
- bl SetMainCallback2
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080CDDE8: .4byte Task_BeginEvolutionScene
-_080CDDEC: .4byte gTasks
-_080CDDF0: .4byte sub_80CDD18
- thumb_func_end BeginEvolutionScene
-
- thumb_func_start EvolutionScene
-EvolutionScene: @ 80CDDF4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x24
- adds r4, r0, 0
- mov r10, r1
- mov r0, r10
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x18]
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x1C]
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0
- bl SetVBlankCallback
- movs r1, 0
- str r1, [sp, 0x14]
- add r0, sp, 0x14
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _080CE07C @ =0x05006000
- bl CpuSet
- movs r0, 0x4C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x42
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x46
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- bl ResetPaletteFade
- ldr r0, _080CE080 @ =gBattle_BG0_X
- movs r2, 0
- strh r2, [r0]
- ldr r0, _080CE084 @ =gBattle_BG0_Y
- strh r2, [r0]
- ldr r0, _080CE088 @ =gBattle_BG1_X
- strh r2, [r0]
- ldr r0, _080CE08C @ =gBattle_BG1_Y
- strh r2, [r0]
- ldr r0, _080CE090 @ =gBattle_BG2_X
- strh r2, [r0]
- ldr r0, _080CE094 @ =gBattle_BG2_Y
- strh r2, [r0]
- ldr r1, _080CE098 @ =gBattle_BG3_X
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _080CE09C @ =gBattle_BG3_Y
- movs r1, 0
- strh r1, [r0]
- ldr r1, _080CE0A0 @ =gBattleTerrain
- movs r0, 0x9
- strb r0, [r1]
- bl sub_800F34C
- bl LoadBattleTextboxAndBackground
- bl ResetSpriteData
- bl ScanlineEffect_Stop
- bl ResetTasks
- bl FreeAllSpritePalettes
- ldr r0, _080CE0A4 @ =gReservedSpritePaletteCount
- movs r2, 0x4
- strb r2, [r0]
- movs r0, 0x64
- bl AllocZeroed
- ldr r1, _080CE0A8 @ =gUnknown_2039A20
- str r0, [r1]
- bl AllocateMonSpritesGfx
- adds r0, r4, 0
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- ldr r0, _080CE0AC @ =gStringVar1
- mov r1, sp
- bl StringCopy10
- ldr r0, _080CE0B0 @ =gStringVar2
- movs r1, 0xB
- mov r2, r10
- muls r2, r1
- adds r1, r2, 0
- ldr r2, _080CE0B4 @ =gSpeciesNames
- adds r1, r2
- bl StringCopy
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- str r0, [sp, 0x20]
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- mov r9, r0
- lsls r0, r5, 3
- ldr r1, _080CE0B8 @ =gMonFrontPicTable
- adds r0, r1
- ldr r2, _080CE0BC @ =gMonSpritesGfxPtr
- ldr r1, [r2]
- ldr r1, [r1, 0x8]
- adds r2, r5, 0
- bl DecompressPicFromTable
- adds r0, r5, 0
- ldr r1, [sp, 0x20]
- mov r2, r9
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x88
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- adds r0, r5, 0
- movs r1, 0x1
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _080CE0C0 @ =gMultiuseSpriteTemplate
- mov r8, r0
- ldr r1, _080CE0C4 @ =gDummySpriteAffineAnimTable
- str r1, [r0, 0x10]
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- ldr r1, _080CE0A8 @ =gUnknown_2039A20
- ldr r2, [r1]
- lsls r1, r0, 24
- lsrs r3, r1, 24
- strb r0, [r2]
- ldr r7, _080CE0C8 @ =gSprites
- lsls r1, r3, 4
- adds r1, r3
- lsls r1, 2
- adds r6, r7, 0
- adds r6, 0x1C
- adds r0, r1, r6
- ldr r2, _080CE0CC @ =SpriteCallbackDummy2
- str r2, [r0]
- adds r1, r7
- ldrb r2, [r1, 0x5]
- movs r4, 0xF
- adds r0, r4, 0
- ands r0, r2
- movs r2, 0x10
- orrs r0, r2
- strb r0, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- mov r1, r10
- lsls r0, r1, 3
- ldr r2, _080CE0B8 @ =gMonFrontPicTable
- adds r0, r2
- ldr r2, _080CE0BC @ =gMonSpritesGfxPtr
- ldr r1, [r2]
- ldr r1, [r1, 0x10]
- mov r2, r10
- bl DecompressPicFromTable
- mov r0, r10
- ldr r1, [sp, 0x20]
- mov r2, r9
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- mov r0, r10
- movs r1, 0x3
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _080CE0C4 @ =gDummySpriteAffineAnimTable
- mov r1, r8
- str r0, [r1, 0x10]
- mov r0, r8
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- ldr r1, _080CE0A8 @ =gUnknown_2039A20
- ldr r2, [r1]
- lsls r1, r0, 24
- lsrs r3, r1, 24
- strb r0, [r2, 0x1]
- lsls r1, r3, 4
- adds r1, r3
- lsls r1, 2
- adds r6, r1, r6
- ldr r2, _080CE0CC @ =SpriteCallbackDummy2
- str r2, [r6]
- adds r1, r7
- ldrb r0, [r1, 0x5]
- ands r4, r0
- movs r0, 0x20
- orrs r4, r0
- strb r4, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- bl LoadEvoSparkleSpriteAndPal
- ldr r0, _080CE0D0 @ =sub_80CE8DC
- movs r1, 0
- bl CreateTask
- ldr r1, _080CE0A8 @ =gUnknown_2039A20
- ldr r2, [r1]
- lsls r1, r0, 24
- lsrs r3, r1, 24
- strb r0, [r2, 0x2]
- ldr r1, _080CE0D4 @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- strh r2, [r0, 0x8]
- strh r5, [r0, 0xA]
- mov r1, r10
- strh r1, [r0, 0xC]
- mov r2, sp
- ldrh r2, [r2, 0x18]
- strh r2, [r0, 0xE]
- movs r1, 0x1
- strh r1, [r0, 0x10]
- movs r1, 0
- strh r1, [r0, 0x1A]
- mov r2, sp
- ldrh r2, [r2, 0x1C]
- strh r2, [r0, 0x1C]
- ldr r1, _080CE0A8 @ =gUnknown_2039A20
- ldr r0, [r1]
- ldr r1, _080CE0D8 @ =gPlttBufferUnfaded + 0x40
- adds r0, 0x4
- movs r2, 0x60
- bl memcpy
- movs r1, 0xFA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, _080CE0DC @ =nullsub_76
- bl SetHBlankCallback
- ldr r0, _080CE0E0 @ =sub_80D0050
- bl SetVBlankCallback
- bl m4aMPlayAllStop
- bl HelpSystem_Disable
- ldr r0, _080CE0E4 @ =sub_80CE710
- bl SetMainCallback2
- add sp, 0x24
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CE07C: .4byte 0x05006000
-_080CE080: .4byte gBattle_BG0_X
-_080CE084: .4byte gBattle_BG0_Y
-_080CE088: .4byte gBattle_BG1_X
-_080CE08C: .4byte gBattle_BG1_Y
-_080CE090: .4byte gBattle_BG2_X
-_080CE094: .4byte gBattle_BG2_Y
-_080CE098: .4byte gBattle_BG3_X
-_080CE09C: .4byte gBattle_BG3_Y
-_080CE0A0: .4byte gBattleTerrain
-_080CE0A4: .4byte gReservedSpritePaletteCount
-_080CE0A8: .4byte gUnknown_2039A20
-_080CE0AC: .4byte gStringVar1
-_080CE0B0: .4byte gStringVar2
-_080CE0B4: .4byte gSpeciesNames
-_080CE0B8: .4byte gMonFrontPicTable
-_080CE0BC: .4byte gMonSpritesGfxPtr
-_080CE0C0: .4byte gMultiuseSpriteTemplate
-_080CE0C4: .4byte gDummySpriteAffineAnimTable
-_080CE0C8: .4byte gSprites
-_080CE0CC: .4byte SpriteCallbackDummy2
-_080CE0D0: .4byte sub_80CE8DC
-_080CE0D4: .4byte gTasks
-_080CE0D8: .4byte gPlttBufferUnfaded + 0x40
-_080CE0DC: .4byte nullsub_76
-_080CE0E0: .4byte sub_80D0050
-_080CE0E4: .4byte sub_80CE710
- thumb_func_end EvolutionScene
-
- thumb_func_start CB2_EvolutionSceneLoadGraphics
-CB2_EvolutionSceneLoadGraphics: @ 80CE0E8
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x8
- ldr r2, _080CE280 @ =gTasks
- ldr r0, _080CE284 @ =gUnknown_2039A20
- mov r8, r0
- ldr r0, [r0]
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x1C
- ldrsh r2, [r0, r1]
- movs r1, 0x64
- adds r4, r2, 0
- muls r4, r1
- ldr r1, _080CE288 @ =gPlayerParty
- adds r4, r1
- ldrh r5, [r0, 0xC]
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- mov r9, r0
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r6, r0, 0
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0
- bl SetVBlankCallback
- movs r4, 0
- str r4, [sp, 0x4]
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _080CE28C @ =0x05006000
- add r0, sp, 0x4
- bl CpuSet
- movs r0, 0x4C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x42
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x46
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- bl ResetPaletteFade
- ldr r0, _080CE290 @ =gBattle_BG0_X
- strh r4, [r0]
- ldr r0, _080CE294 @ =gBattle_BG0_Y
- strh r4, [r0]
- ldr r0, _080CE298 @ =gBattle_BG1_X
- strh r4, [r0]
- ldr r0, _080CE29C @ =gBattle_BG1_Y
- strh r4, [r0]
- ldr r0, _080CE2A0 @ =gBattle_BG2_X
- strh r4, [r0]
- ldr r0, _080CE2A4 @ =gBattle_BG2_Y
- strh r4, [r0]
- ldr r1, _080CE2A8 @ =gBattle_BG3_X
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _080CE2AC @ =gBattle_BG3_Y
- strh r4, [r0]
- ldr r1, _080CE2B0 @ =gBattleTerrain
- movs r0, 0x9
- strb r0, [r1]
- bl sub_800F34C
- bl LoadBattleTextboxAndBackground
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r1, _080CE2B4 @ =gReservedSpritePaletteCount
- movs r0, 0x4
- strb r0, [r1]
- lsls r0, r5, 3
- ldr r1, _080CE2B8 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _080CE2BC @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- ldr r1, [r1, 0x10]
- adds r2, r5, 0
- bl DecompressPicFromTable
- adds r0, r5, 0
- mov r1, r9
- adds r2, r6, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- adds r0, r5, 0
- movs r1, 0x3
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _080CE2C0 @ =gMultiuseSpriteTemplate
- ldr r1, _080CE2C4 @ =gDummySpriteAffineAnimTable
- str r1, [r0, 0x10]
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- mov r2, r8
- ldr r1, [r2]
- lsls r2, r0, 24
- lsrs r2, 24
- strb r0, [r1, 0x1]
- ldr r3, _080CE2C8 @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x1C
- adds r0, r1, r0
- ldr r2, _080CE2CC @ =SpriteCallbackDummy2
- str r2, [r0]
- adds r1, r3
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- movs r2, 0x20
- orrs r0, r2
- strb r0, [r1, 0x5]
- movs r1, 0xFA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, _080CE2D0 @ =nullsub_76
- bl SetHBlankCallback
- ldr r0, _080CE2D4 @ =sub_80D0050
- bl SetVBlankCallback
- ldr r0, _080CE2D8 @ =sub_80CE710
- bl SetMainCallback2
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080CE280: .4byte gTasks
-_080CE284: .4byte gUnknown_2039A20
-_080CE288: .4byte gPlayerParty
-_080CE28C: .4byte 0x05006000
-_080CE290: .4byte gBattle_BG0_X
-_080CE294: .4byte gBattle_BG0_Y
-_080CE298: .4byte gBattle_BG1_X
-_080CE29C: .4byte gBattle_BG1_Y
-_080CE2A0: .4byte gBattle_BG2_X
-_080CE2A4: .4byte gBattle_BG2_Y
-_080CE2A8: .4byte gBattle_BG3_X
-_080CE2AC: .4byte gBattle_BG3_Y
-_080CE2B0: .4byte gBattleTerrain
-_080CE2B4: .4byte gReservedSpritePaletteCount
-_080CE2B8: .4byte gMonFrontPicTable
-_080CE2BC: .4byte gMonSpritesGfxPtr
-_080CE2C0: .4byte gMultiuseSpriteTemplate
-_080CE2C4: .4byte gDummySpriteAffineAnimTable
-_080CE2C8: .4byte gSprites
-_080CE2CC: .4byte SpriteCallbackDummy2
-_080CE2D0: .4byte nullsub_76
-_080CE2D4: .4byte sub_80D0050
-_080CE2D8: .4byte sub_80CE710
- thumb_func_end CB2_EvolutionSceneLoadGraphics
-
- thumb_func_start CB2_TradeEvolutionSceneLoadGraphics
-CB2_TradeEvolutionSceneLoadGraphics: @ 80CE2DC
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r2, _080CE318 @ =gTasks
- ldr r0, _080CE31C @ =gUnknown_2039A20
- ldr r0, [r0]
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x1C
- ldrsh r2, [r0, r1]
- movs r1, 0x64
- muls r2, r1
- ldr r1, _080CE320 @ =gPlayerParty
- adds r4, r2, r1
- ldrh r6, [r0, 0xC]
- ldr r0, _080CE324 @ =gMain
- movs r3, 0x87
- lsls r3, 3
- adds r0, r3
- ldrb r0, [r0]
- cmp r0, 0x7
- bls _080CE30E
- b _080CE534
-_080CE30E:
- lsls r0, 2
- ldr r1, _080CE328 @ =_080CE32C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CE318: .4byte gTasks
-_080CE31C: .4byte gUnknown_2039A20
-_080CE320: .4byte gPlayerParty
-_080CE324: .4byte gMain
-_080CE328: .4byte _080CE32C
- .align 2, 0
-_080CE32C:
- .4byte _080CE34C
- .4byte _080CE3BC
- .4byte _080CE3E4
- .4byte _080CE3EA
- .4byte _080CE414
- .4byte _080CE45C
- .4byte _080CE4CC
- .4byte _080CE504
-_080CE34C:
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0
- bl SetVBlankCallback
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r1, _080CE398 @ =gReservedSpritePaletteCount
- movs r0, 0x4
- strb r0, [r1]
- ldr r0, _080CE39C @ =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080CE3A0 @ =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, _080CE3A4 @ =gBattle_BG1_X
- strh r1, [r0]
- ldr r0, _080CE3A8 @ =gBattle_BG1_Y
- strh r1, [r0]
- ldr r0, _080CE3AC @ =gBattle_BG2_X
- strh r1, [r0]
- ldr r0, _080CE3B0 @ =gBattle_BG2_Y
- strh r1, [r0]
- ldr r2, _080CE3B4 @ =gBattle_BG3_X
- movs r3, 0x80
- lsls r3, 1
- adds r0, r3, 0
- strh r0, [r2]
- ldr r0, _080CE3B8 @ =gBattle_BG3_Y
- strh r1, [r0]
- b _080CE4EC
- .align 2, 0
-_080CE398: .4byte gReservedSpritePaletteCount
-_080CE39C: .4byte gBattle_BG0_X
-_080CE3A0: .4byte gBattle_BG0_Y
-_080CE3A4: .4byte gBattle_BG1_X
-_080CE3A8: .4byte gBattle_BG1_Y
-_080CE3AC: .4byte gBattle_BG2_X
-_080CE3B0: .4byte gBattle_BG2_Y
-_080CE3B4: .4byte gBattle_BG3_X
-_080CE3B8: .4byte gBattle_BG3_Y
-_080CE3BC:
- bl ResetPaletteFade
- ldr r0, _080CE3D8 @ =nullsub_76
- bl SetHBlankCallback
- ldr r0, _080CE3DC @ =sub_80D00D8
- bl SetVBlankCallback
- ldr r1, _080CE3E0 @ =gMain
- movs r3, 0x87
- lsls r3, 3
- adds r1, r3
- b _080CE4F4
- .align 2, 0
-_080CE3D8: .4byte nullsub_76
-_080CE3DC: .4byte sub_80D00D8
-_080CE3E0: .4byte gMain
-_080CE3E4:
- bl LoadTradeAnimGfx
- b _080CE4EC
-_080CE3EA:
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- ldr r1, _080CE410 @ =gMain
- movs r3, 0x87
- lsls r3, 3
- adds r1, r3
- b _080CE4F4
- .align 2, 0
-_080CE410: .4byte gMain
-_080CE414:
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- adds r5, r0, 0
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r0, r6, 3
- ldr r1, _080CE454 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _080CE458 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- ldr r1, [r1, 0x10]
- adds r2, r6, 0
- bl DecompressPicFromTable
- adds r0, r6, 0
- adds r1, r5, 0
- adds r2, r4, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- b _080CE4EC
- .align 2, 0
-_080CE454: .4byte gMonFrontPicTable
-_080CE458: .4byte gMonSpritesGfxPtr
-_080CE45C:
- adds r0, r6, 0
- movs r1, 0x1
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _080CE4B4 @ =gMultiuseSpriteTemplate
- ldr r1, _080CE4B8 @ =gDummySpriteAffineAnimTable
- str r1, [r0, 0x10]
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- ldr r1, _080CE4BC @ =gUnknown_2039A20
- ldr r1, [r1]
- lsls r2, r0, 24
- lsrs r2, 24
- strb r0, [r1, 0x1]
- ldr r3, _080CE4C0 @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x1C
- adds r0, r1, r0
- ldr r2, _080CE4C4 @ =SpriteCallbackDummy2
- str r2, [r0]
- adds r1, r3
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- movs r2, 0x20
- orrs r0, r2
- strb r0, [r1, 0x5]
- ldr r1, _080CE4C8 @ =gMain
- movs r3, 0x87
- lsls r3, 3
- adds r1, r3
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- bl sub_80504B0
- b _080CE534
- .align 2, 0
-_080CE4B4: .4byte gMultiuseSpriteTemplate
-_080CE4B8: .4byte gDummySpriteAffineAnimTable
-_080CE4BC: .4byte gUnknown_2039A20
-_080CE4C0: .4byte gSprites
-_080CE4C4: .4byte SpriteCallbackDummy2
-_080CE4C8: .4byte gMain
-_080CE4CC:
- ldr r0, _080CE4FC @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _080CE4E0
- bl LoadWirelessStatusIndicatorSpriteGfx
- movs r0, 0
- movs r1, 0
- bl CreateWirelessStatusIndicatorSprite
-_080CE4E0:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
-_080CE4EC:
- ldr r1, _080CE500 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
-_080CE4F4:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _080CE534
- .align 2, 0
-_080CE4FC: .4byte gWirelessCommType
-_080CE500: .4byte gMain
-_080CE504:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- bl sub_805049C
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- ldr r0, _080CE53C @ =sub_80CE72C
- bl SetMainCallback2
- movs r1, 0x9A
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
-_080CE534:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080CE53C: .4byte sub_80CE72C
- thumb_func_end CB2_TradeEvolutionSceneLoadGraphics
-
- thumb_func_start TradeEvolutionScene
-TradeEvolutionScene: @ 80CE540
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x14]
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- ldr r0, _080CE6B0 @ =gStringVar1
- mov r1, sp
- bl StringCopy10
- ldr r0, _080CE6B4 @ =gStringVar2
- movs r1, 0xB
- muls r1, r5
- ldr r2, _080CE6B8 @ =gSpeciesNames
- adds r1, r2
- bl StringCopy
- ldr r1, _080CE6BC @ =gAffineAnimsDisabled
- movs r0, 0x1
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r7, r0, 0
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- mov r10, r0
- ldr r1, _080CE6C0 @ =gUnknown_2039A20
- mov r9, r1
- movs r0, 0x64
- bl AllocZeroed
- mov r2, r9
- str r0, [r2]
- movs r4, 0
- strb r6, [r0]
- lsls r0, r5, 3
- ldr r1, _080CE6C4 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _080CE6C8 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- ldr r1, [r1, 0x8]
- adds r2, r5, 0
- bl DecompressPicFromTable
- adds r0, r5, 0
- mov r1, r10
- adds r2, r7, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- adds r0, r5, 0
- movs r1, 0x1
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _080CE6CC @ =gMultiuseSpriteTemplate
- ldr r1, _080CE6D0 @ =gDummySpriteAffineAnimTable
- str r1, [r0, 0x10]
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- mov r1, r9
- ldr r2, [r1]
- lsls r1, r0, 24
- lsrs r6, r1, 24
- strb r0, [r2, 0x1]
- ldr r3, _080CE6D4 @ =gSprites
- lsls r1, r6, 4
- adds r1, r6
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x1C
- adds r0, r1, r0
- ldr r2, _080CE6D8 @ =SpriteCallbackDummy2
- str r2, [r0]
- adds r1, r3
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- movs r2, 0x20
- orrs r0, r2
- strb r0, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- bl LoadEvoSparkleSpriteAndPal
- ldr r0, _080CE6DC @ =sub_80CF53C
- movs r1, 0
- bl CreateTask
- mov r1, r9
- ldr r2, [r1]
- lsls r1, r0, 24
- lsrs r6, r1, 24
- strb r0, [r2, 0x2]
- ldr r1, _080CE6E0 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- strh r4, [r0, 0x8]
- mov r2, r8
- strh r2, [r0, 0xA]
- strh r5, [r0, 0xC]
- movs r1, 0x1
- strh r1, [r0, 0x10]
- strh r4, [r0, 0x1A]
- mov r1, sp
- ldrh r1, [r1, 0x14]
- strh r1, [r0, 0x1C]
- ldr r0, _080CE6E4 @ =gBattle_BG0_X
- strh r4, [r0]
- ldr r0, _080CE6E8 @ =gBattle_BG0_Y
- strh r4, [r0]
- ldr r0, _080CE6EC @ =gBattle_BG1_X
- strh r4, [r0]
- ldr r0, _080CE6F0 @ =gBattle_BG1_Y
- strh r4, [r0]
- ldr r0, _080CE6F4 @ =gBattle_BG2_X
- strh r4, [r0]
- ldr r0, _080CE6F8 @ =gBattle_BG2_Y
- strh r4, [r0]
- ldr r1, _080CE6FC @ =gBattle_BG3_X
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _080CE700 @ =gBattle_BG3_Y
- strh r4, [r0]
- ldr r2, _080CE704 @ =gTextFlags
- ldrb r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _080CE708 @ =sub_80D00D8
- bl SetVBlankCallback
- ldr r0, _080CE70C @ =sub_80CE72C
- bl SetMainCallback2
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CE6B0: .4byte gStringVar1
-_080CE6B4: .4byte gStringVar2
-_080CE6B8: .4byte gSpeciesNames
-_080CE6BC: .4byte gAffineAnimsDisabled
-_080CE6C0: .4byte gUnknown_2039A20
-_080CE6C4: .4byte gMonFrontPicTable
-_080CE6C8: .4byte gMonSpritesGfxPtr
-_080CE6CC: .4byte gMultiuseSpriteTemplate
-_080CE6D0: .4byte gDummySpriteAffineAnimTable
-_080CE6D4: .4byte gSprites
-_080CE6D8: .4byte SpriteCallbackDummy2
-_080CE6DC: .4byte sub_80CF53C
-_080CE6E0: .4byte gTasks
-_080CE6E4: .4byte gBattle_BG0_X
-_080CE6E8: .4byte gBattle_BG0_Y
-_080CE6EC: .4byte gBattle_BG1_X
-_080CE6F0: .4byte gBattle_BG1_Y
-_080CE6F4: .4byte gBattle_BG2_X
-_080CE6F8: .4byte gBattle_BG2_Y
-_080CE6FC: .4byte gBattle_BG3_X
-_080CE700: .4byte gBattle_BG3_Y
-_080CE704: .4byte gTextFlags
-_080CE708: .4byte sub_80D00D8
-_080CE70C: .4byte sub_80CE72C
- thumb_func_end TradeEvolutionScene
-
- thumb_func_start sub_80CE710
-sub_80CE710: @ 80CE710
- push {lr}
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTextPrinters
- bl UpdatePaletteFade
- bl RunTasks
- pop {r0}
- bx r0
- thumb_func_end sub_80CE710
-
- thumb_func_start sub_80CE72C
-sub_80CE72C: @ 80CE72C
- push {lr}
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTextPrinters
- bl UpdatePaletteFade
- bl RunTasks
- pop {r0}
- bx r0
- thumb_func_end sub_80CE72C
-
- thumb_func_start CreateShedinja
-CreateShedinja: @ 80CE748
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- str r1, [sp, 0x4]
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- movs r0, 0
- str r0, [sp]
- mov r0, r10
- lsls r0, 2
- str r0, [sp, 0x8]
- add r0, r10
- lsls r7, r0, 3
- ldr r1, _080CE8C4 @ =gEvolutionTable
- adds r1, r7
- mov r8, r1
- ldrh r0, [r1]
- cmp r0, 0xD
- beq _080CE778
- b _080CE8B2
-_080CE778:
- ldr r6, _080CE8C8 @ =gPlayerPartyCount
- ldrb r0, [r6]
- cmp r0, 0x5
- bls _080CE782
- b _080CE8B2
-_080CE782:
- movs r5, 0x64
- muls r0, r5
- ldr r4, _080CE8CC @ =gPlayerParty
- adds r0, r4
- mov r9, r0
- ldr r1, [sp, 0x4]
- movs r2, 0x64
- bl CopyMon
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- ldr r1, _080CE8C4 @ =gEvolutionTable
- adds r2, r1, r7
- adds r2, 0xC
- movs r1, 0xB
- bl SetMonData
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- mov r1, r8
- ldrh r2, [r1, 0xC]
- movs r1, 0xB
- muls r2, r1
- ldr r1, _080CE8D0 @ =gSpeciesNames
- adds r2, r1
- movs r1, 0x2
- bl SetMonData
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- movs r1, 0x8
- mov r2, sp
- bl SetMonData
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- movs r1, 0xA
- mov r2, sp
- bl SetMonData
- movs r4, 0x32
- ldr r0, [sp, 0x8]
- mov r8, r0
- adds r5, r6, 0
-_080CE7F0:
- ldrb r1, [r5]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080CE8CC @ =gPlayerParty
- adds r0, r1
- adds r1, r4, 0
- mov r2, sp
- bl SetMonData
- adds r4, 0x1
- cmp r4, 0x36
- ble _080CE7F0
- movs r4, 0x43
- ldr r7, _080CE8C8 @ =gPlayerPartyCount
-_080CE80C:
- ldrb r0, [r7]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _080CE8CC @ =gPlayerParty
- adds r0, r5
- adds r1, r4, 0
- mov r2, sp
- bl SetMonData
- adds r4, 0x1
- cmp r4, 0x4F
- ble _080CE80C
- ldr r4, _080CE8C8 @ =gPlayerPartyCount
- ldrb r0, [r4]
- muls r0, r6
- adds r0, r5
- movs r1, 0x37
- mov r2, sp
- bl SetMonData
- movs r0, 0xFF
- str r0, [sp]
- ldrb r0, [r4]
- muls r0, r6
- adds r0, r5
- movs r1, 0x40
- mov r2, sp
- bl SetMonData
- ldrb r0, [r4]
- muls r0, r6
- adds r0, r5
- bl CalculateMonStats
- bl CalculatePlayerPartyCount
- ldr r0, _080CE8C4 @ =gEvolutionTable
- mov r4, r8
- add r4, r10
- lsls r4, 3
- adds r4, r0
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2
- bl GetSetPokedexFlag
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl GetSetPokedexFlag
- mov r0, r9
- movs r1, 0xB
- bl GetMonData
- ldr r1, _080CE8D4 @ =0x0000012f
- cmp r0, r1
- bne _080CE8B2
- mov r0, r9
- movs r1, 0x3
- bl GetMonData
- cmp r0, 0x1
- bne _080CE8B2
- ldr r0, [sp, 0x4]
- movs r1, 0xB
- bl GetMonData
- movs r1, 0x97
- lsls r1, 1
- cmp r0, r1
- bne _080CE8B2
- ldr r2, _080CE8D8 @ =gUnknown_83F8440
- mov r0, r9
- movs r1, 0x2
- bl SetMonData
-_080CE8B2:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CE8C4: .4byte gEvolutionTable
-_080CE8C8: .4byte gPlayerPartyCount
-_080CE8CC: .4byte gPlayerParty
-_080CE8D0: .4byte gSpeciesNames
-_080CE8D4: .4byte 0x0000012f
-_080CE8D8: .4byte gUnknown_83F8440
- thumb_func_end CreateShedinja
-
- thumb_func_start sub_80CE8DC
-sub_80CE8DC: @ 80CE8DC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r4, _080CE93C @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r5, r0, r4
- movs r0, 0x1C
- ldrsh r1, [r5, r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080CE940 @ =gPlayerParty
- adds r1, r0
- mov r9, r1
- bl IsNationalPokedexEnabled
- mov r10, r4
- cmp r0, 0
- bne _080CE948
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0x8
- bne _080CE948
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0x97
- ble _080CE948
- movs r0, 0x11
- strh r0, [r5, 0x8]
- movs r2, 0x1
- strh r2, [r5, 0x1A]
- ldr r0, _080CE944 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r10
- strh r2, [r0, 0x18]
- bl sub_80D04A8
- bl _080CF528
- .align 2, 0
-_080CE93C: .4byte gTasks
-_080CE940: .4byte gPlayerParty
-_080CE944: .4byte gBattleCommunication
-_080CE948:
- ldr r0, _080CE9A0 @ =gMain
- ldrh r1, [r0, 0x2C]
- ldr r3, _080CE9A4 @ =gTasks
- mov r10, r3
- lsls r2, r7, 2
- mov r8, r2
- adds r5, r0, 0
- cmp r1, 0x2
- bne _080CE9AC
- adds r0, r2, r7
- lsls r0, 3
- adds r2, r0, r3
- movs r3, 0x8
- ldrsh r0, [r2, r3]
- cmp r0, 0x8
- bne _080CE9AC
- ldr r4, _080CE9A8 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- add r1, r10
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CE9AC
- ldrh r1, [r2, 0xE]
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _080CE9AC
- movs r0, 0x11
- strh r0, [r2, 0x8]
- ldrb r1, [r4, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r10
- strh r3, [r0, 0x18]
- bl sub_80D04A8
- bl _080CF528
- .align 2, 0
-_080CE9A0: .4byte gMain
-_080CE9A4: .4byte gTasks
-_080CE9A8: .4byte gBattleCommunication
-_080CE9AC:
- mov r1, r8
- adds r0, r1, r7
- lsls r0, 3
- add r0, r10
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- cmp r0, 0x16
- bls _080CE9C0
- bl _080CF528
-_080CE9C0:
- lsls r0, 2
- ldr r1, _080CE9CC @ =_080CE9D0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CE9CC: .4byte _080CE9D0
- .align 2, 0
-_080CE9D0:
- .4byte _080CEA2C
- .4byte _080CEA90
- .4byte _080CEAD0
- .4byte _080CEAF0
- .4byte _080CEB18
- .4byte _080CEB58
- .4byte _080CEB90
- .4byte _080CEBD0
- .4byte _080CEC08
- .4byte _080CEC4C
- .4byte _080CEC68
- .4byte _080CEC94
- .4byte _080CECC0
- .4byte _080CED0C
- .4byte _080CED2C
- .4byte _080CEDB8
- .4byte _080CEE60
- .4byte _080CEED0
- .4byte _080CEF10
- .4byte _080CEF3C
- .4byte _080CEF9C
- .4byte _080CEFF8
- .4byte _080CF034
-_080CEA2C:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r2, _080CEA84 @ =gSprites
- ldr r0, _080CEA88 @ =gUnknown_2039A20
- ldr r0, [r0]
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- ldr r0, _080CEA8C @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- bl _080CF528
- .align 2, 0
-_080CEA84: .4byte gSprites
-_080CEA88: .4byte gUnknown_2039A20
-_080CEA8C: .4byte gTasks
-_080CEA90:
- ldr r0, _080CEAC0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CEAA0
- bl _080CF528
-_080CEAA0:
- ldr r4, _080CEAC4 @ =gStringVar4
- ldr r1, _080CEAC8 @ =gUnknown_83FE672
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CEACC @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- b _080CEFDE
- .align 2, 0
-_080CEAC0: .4byte gPaletteFade
-_080CEAC4: .4byte gStringVar4
-_080CEAC8: .4byte gUnknown_83FE672
-_080CEACC: .4byte gTasks
-_080CEAD0:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CEAE0
- bl _080CF528
-_080CEAE0:
- ldr r0, _080CEAEC @ =gTasks
- mov r3, r8
- adds r4, r3, r7
- lsls r4, 3
- adds r4, r0
- b _080CEF26
- .align 2, 0
-_080CEAEC: .4byte gTasks
-_080CEAF0:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _080CEAFE
- bl _080CF528
-_080CEAFE:
- ldr r0, _080CEB10 @ =0x00000107
- bl PlaySE
- ldr r0, _080CEB14 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- b _080CEFDE
- .align 2, 0
-_080CEB10: .4byte 0x00000107
-_080CEB14: .4byte gTasks
-_080CEB18:
- bl IsSEPlaying
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080CEB28
- bl _080CF528
-_080CEB28:
- movs r0, 0x84
- lsls r0, 1
- bl PlayNewMapMusic
- ldr r0, _080CEB54 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- str r4, [sp]
- movs r0, 0x1C
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl _080CF528
- .align 2, 0
-_080CEB54: .4byte gTasks
-_080CEB58:
- ldr r0, _080CEB84 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CEB68
- bl _080CF528
-_080CEB68:
- movs r0, 0
- bl InitMovingBackgroundTask
- movs r0, 0x11
- bl LaunchTask_PreEvoSparklesSet1
- ldr r1, _080CEB88 @ =gBattleCommunication
- strb r0, [r1, 0x2]
- ldr r0, _080CEB8C @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- b _080CEFDE
- .align 2, 0
-_080CEB84: .4byte gPaletteFade
-_080CEB88: .4byte gBattleCommunication
-_080CEB8C: .4byte gTasks
-_080CEB90:
- ldr r4, _080CEBC8 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- add r1, r10
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CEBA6
- bl _080CF528
-_080CEBA6:
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- add r1, r10
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- ldr r0, _080CEBCC @ =gUnknown_2039A20
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1, 0x3]
- bl sub_80F5EC0
- strb r0, [r4, 0x2]
- bl _080CF528
- .align 2, 0
-_080CEBC8: .4byte gBattleCommunication
-_080CEBCC: .4byte gUnknown_2039A20
-_080CEBD0:
- ldr r4, _080CEC00 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- add r1, r10
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CEBE6
- bl _080CF528
-_080CEBE6:
- ldr r0, _080CEC04 @ =gUnknown_2039A20
- ldr r1, [r0]
- ldrb r0, [r1]
- ldrb r1, [r1, 0x1]
- bl sub_80F62B4
- strb r0, [r4, 0x2]
- mov r0, r8
- adds r1, r0, r7
- lsls r1, 3
- add r1, r10
- b _080CEFDE
- .align 2, 0
-_080CEC00: .4byte gBattleCommunication
-_080CEC04: .4byte gUnknown_2039A20
-_080CEC08:
- ldr r2, _080CEC44 @ =gUnknown_2039A20
- ldr r1, [r2]
- ldrb r0, [r1, 0x3]
- subs r0, 0x1
- strb r0, [r1, 0x3]
- lsls r0, 24
- cmp r0, 0
- beq _080CEC1C
- bl _080CF528
-_080CEC1C:
- ldr r1, [r2]
- movs r0, 0x3
- strb r0, [r1, 0x3]
- ldr r0, _080CEC48 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r10
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080CEC38
- bl _080CF528
-_080CEC38:
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- add r1, r10
- b _080CEFDE
- .align 2, 0
-_080CEC44: .4byte gUnknown_2039A20
-_080CEC48: .4byte gBattleCommunication
-_080CEC4C:
- bl sub_80F5F74
- ldr r1, _080CEC60 @ =gBattleCommunication
- strb r0, [r1, 0x2]
- ldr r0, _080CEC64 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- b _080CEFDE
- .align 2, 0
-_080CEC60: .4byte gBattleCommunication
-_080CEC64: .4byte gTasks
-_080CEC68:
- ldr r6, _080CEC90 @ =gBattleCommunication
- ldrb r0, [r6, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- add r1, r10
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CEC7E
- bl _080CF528
-_080CEC7E:
- mov r0, r8
- adds r4, r0, r7
- lsls r4, 3
- add r4, r10
- ldrh r0, [r4, 0xC]
- bl LaunchTask_PostEvoSparklesSet2AndFlash
- strb r0, [r6, 0x2]
- b _080CEF2E
- .align 2, 0
-_080CEC90: .4byte gBattleCommunication
-_080CEC94:
- ldr r0, _080CECBC @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r10
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080CECAA
- bl _080CF528
-_080CECAA:
- movs r0, 0x1B
- bl PlaySE
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- add r1, r10
- b _080CEFDE
- .align 2, 0
-_080CECBC: .4byte gBattleCommunication
-_080CECC0:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080CECCE
- bl _080CF528
-_080CECCE:
- bl m4aMPlayAllStop
- ldr r0, _080CED00 @ =gPlttBufferUnfaded + 0x40
- ldr r1, _080CED04 @ =gUnknown_2039A20
- ldr r1, [r1]
- adds r1, 0x4
- movs r2, 0x60
- bl memcpy
- bl sub_80D04E8
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1C
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _080CED08 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- b _080CEFDE
- .align 2, 0
-_080CED00: .4byte gPlttBufferUnfaded + 0x40
-_080CED04: .4byte gUnknown_2039A20
-_080CED08: .4byte gTasks
-_080CED0C:
- ldr r0, _080CED28 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CED1C
- bl _080CF528
-_080CED1C:
- mov r0, r8
- adds r4, r0, r7
- lsls r4, 3
- add r4, r10
- ldrh r0, [r4, 0xC]
- b _080CEF28
- .align 2, 0
-_080CED28: .4byte gPaletteFade
-_080CED2C:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _080CED3A
- bl _080CF528
-_080CED3A:
- ldr r4, _080CEDA8 @ =gStringVar4
- ldr r1, _080CEDAC @ =gUnknown_83FE688
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CEDB0 @ =0x00000103
- bl PlayBGM
- ldr r2, _080CEDB4 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r4, r1, r2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- adds r2, r1
- adds r2, 0xC
- mov r0, r9
- movs r1, 0xB
- bl SetMonData
- mov r0, r9
- bl CalculateMonStats
- ldrh r1, [r4, 0xA]
- ldrh r2, [r4, 0xC]
- mov r0, r9
- bl EvolutionRenameMon
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2
- bl GetSetPokedexFlag
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl GetSetPokedexFlag
- movs r0, 0xE
- bl IncrementGameStat
- b _080CF528
- .align 2, 0
-_080CEDA8: .4byte gStringVar4
-_080CEDAC: .4byte gUnknown_83FE688
-_080CEDB0: .4byte 0x00000103
-_080CEDB4: .4byte gTasks
-_080CEDB8:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CEDC6
- b _080CF528
-_080CEDC6:
- bl HelpSystem_Enable
- ldr r1, _080CEE20 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r5, r0, r1
- ldrb r1, [r5, 0x10]
- mov r0, r9
- bl MonTryLearningNewMove
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0
- beq _080CEE40
- movs r3, 0x1A
- ldrsh r4, [r5, r3]
- cmp r4, 0
- bne _080CEE40
- bl StopMapMusic
- bl Overworld_PlaySpecialMapMusic
- ldrh r1, [r5, 0xE]
- movs r0, 0x80
- orrs r0, r1
- strh r0, [r5, 0xE]
- strh r4, [r5, 0x10]
- strh r4, [r5, 0x14]
- mov r0, r9
- movs r1, 0x2
- add r2, sp, 0x4
- bl GetMonData
- ldr r0, _080CEE24 @ =gBattleTextBuff1
- add r1, sp, 0x4
- bl StringCopy10
- ldr r0, _080CEE28 @ =0x0000ffff
- cmp r6, r0
- bne _080CEE2C
- movs r0, 0x16
- strh r0, [r5, 0x8]
- b _080CF528
- .align 2, 0
-_080CEE20: .4byte gTasks
-_080CEE24: .4byte gBattleTextBuff1
-_080CEE28: .4byte 0x0000ffff
-_080CEE2C:
- ldr r0, _080CEE3C @ =0x0000fffe
- cmp r6, r0
- bne _080CEE34
- b _080CF528
-_080CEE34:
- movs r0, 0x14
- strh r0, [r5, 0x8]
- b _080CF528
- .align 2, 0
-_080CEE3C: .4byte 0x0000fffe
-_080CEE40:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _080CEE5C @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- b _080CEFDE
- .align 2, 0
-_080CEE5C: .4byte gTasks
-_080CEE60:
- ldr r0, _080CEEC4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r2, 0x80
- adds r0, r2, 0
- ands r0, r1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _080CEE74
- b _080CF528
-_080CEE74:
- mov r3, r8
- adds r0, r3, r7
- lsls r0, 3
- mov r1, r10
- adds r4, r0, r1
- ldrh r1, [r4, 0xE]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _080CEE90
- bl StopMapMusic
- bl Overworld_PlaySpecialMapMusic
-_080CEE90:
- movs r2, 0x1A
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080CEEA0
- ldrh r0, [r4, 0xA]
- mov r1, r9
- bl CreateShedinja
-_080CEEA0:
- adds r0, r7, 0
- bl DestroyTask
- bl FreeMonSpritesGfx
- ldr r4, _080CEEC8 @ =gUnknown_2039A20
- ldr r0, [r4]
- bl Free
- str r6, [r4]
- bl FreeAllWindowBuffers
- ldr r0, _080CEECC @ =gCB2_AfterEvolution
- ldr r0, [r0]
- bl SetMainCallback2
- b _080CF528
- .align 2, 0
-_080CEEC4: .4byte gPaletteFade
-_080CEEC8: .4byte gUnknown_2039A20
-_080CEECC: .4byte gCB2_AfterEvolution
-_080CEED0:
- ldr r0, _080CEF04 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r10
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080CEEE4
- b _080CF528
-_080CEEE4:
- bl m4aMPlayAllStop
- ldr r0, _080CEF08 @ =0x0006001c
- ldr r1, _080CEF0C @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- add r1, r10
- b _080CEFDE
- .align 2, 0
-_080CEF04: .4byte gBattleCommunication
-_080CEF08: .4byte 0x0006001c
-_080CEF0C: .4byte 0x00007fff
-_080CEF10:
- ldr r0, _080CEF38 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CEF1E
- b _080CF528
-_080CEF1E:
- mov r0, r8
- adds r4, r0, r7
- lsls r4, 3
- add r4, r10
-_080CEF26:
- ldrh r0, [r4, 0xA]
-_080CEF28:
- movs r1, 0
- bl PlayCry1
-_080CEF2E:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080CF528
- .align 2, 0
-_080CEF38: .4byte gPaletteFade
-_080CEF3C:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _080CEF48
- b _080CF528
-_080CEF48:
- ldr r0, _080CEF64 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- movs r3, 0x1A
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _080CEF70
- ldr r0, _080CEF68 @ =gStringVar4
- ldr r1, _080CEF6C @ =gUnknown_83FE6D0
- bl StringExpandPlaceholders
- b _080CEF78
- .align 2, 0
-_080CEF64: .4byte gTasks
-_080CEF68: .4byte gStringVar4
-_080CEF6C: .4byte gUnknown_83FE6D0
-_080CEF70:
- ldr r0, _080CEF90 @ =gStringVar4
- ldr r1, _080CEF94 @ =gUnknown_83FE6B5
- bl StringExpandPlaceholders
-_080CEF78:
- ldr r0, _080CEF90 @ =gStringVar4
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r1, _080CEF98 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0x1
- strh r1, [r0, 0x1A]
- b _080CF4F2
- .align 2, 0
-_080CEF90: .4byte gStringVar4
-_080CEF94: .4byte gUnknown_83FE6B5
-_080CEF98: .4byte gTasks
-_080CEF9C:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CEFAA
- b _080CF528
-_080CEFAA:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CEFB6
- b _080CF528
-_080CEFB6:
- bl BufferMoveToLearnIntoBattleTextBuff2
- ldr r0, _080CEFE8 @ =0x00000101
- bl PlayFanfare
- ldr r0, _080CEFEC @ =gUnknown_83FDF3C
- ldr r0, [r0, 0xC]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CEFF0 @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CEFF4 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x40
- strh r0, [r1, 0x10]
-_080CEFDE:
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _080CF528
- .align 2, 0
-_080CEFE8: .4byte 0x00000101
-_080CEFEC: .4byte gUnknown_83FDF3C
-_080CEFF0: .4byte gDisplayedStringBattle
-_080CEFF4: .4byte gTasks
-_080CEFF8:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF006
- b _080CF528
-_080CF006:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CF012
- b _080CF528
-_080CF012:
- ldr r0, _080CF030 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x10]
- subs r0, 0x1
- strh r0, [r1, 0x10]
- lsls r0, 16
- cmp r0, 0
- beq _080CF02A
- b _080CF528
-_080CF02A:
- movs r0, 0xF
- strh r0, [r1, 0x8]
- b _080CF528
- .align 2, 0
-_080CF030: .4byte gTasks
-_080CF034:
- mov r3, r8
- adds r0, r3, r7
- lsls r0, 3
- add r0, r10
- movs r1, 0x14
- ldrsh r0, [r0, r1]
- cmp r0, 0xC
- bls _080CF046
- b _080CF528
-_080CF046:
- lsls r0, 2
- ldr r1, _080CF050 @ =_080CF054
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CF050: .4byte _080CF054
- .align 2, 0
-_080CF054:
- .4byte _080CF088
- .4byte _080CF0D4
- .4byte _080CF11C
- .4byte _080CF15A
- .4byte _080CF1BC
- .4byte _080CF2B4
- .4byte _080CF30C
- .4byte _080CF3E0
- .4byte _080CF414
- .4byte _080CF45C
- .4byte _080CF4A4
- .4byte _080CF4D8
- .4byte _080CF504
-_080CF088:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF096
- b _080CF528
-_080CF096:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CF0A2
- b _080CF528
-_080CF0A2:
- bl BufferMoveToLearnIntoBattleTextBuff2
- ldr r0, _080CF0C8 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x10]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF0CC @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CF0D0 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080CF526
- .align 2, 0
-_080CF0C8: .4byte gUnknown_83FDF3C
-_080CF0CC: .4byte gDisplayedStringBattle
-_080CF0D0: .4byte gTasks
-_080CF0D4:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF0E2
- b _080CF528
-_080CF0E2:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CF0EE
- b _080CF528
-_080CF0EE:
- ldr r0, _080CF110 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x14]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF114 @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CF118 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080CF526
- .align 2, 0
-_080CF110: .4byte gUnknown_83FDF3C
-_080CF114: .4byte gDisplayedStringBattle
-_080CF118: .4byte gTasks
-_080CF11C:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080CF15A
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080CF15A
- ldr r0, _080CF1A8 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x18]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF1AC @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CF1B0 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x5
- strh r0, [r1, 0x16]
- movs r0, 0xA
- strh r0, [r1, 0x18]
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- strh r0, [r1, 0x14]
-_080CF15A:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF168
- b _080CF528
-_080CF168:
- bl IsSEPlaying
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _080CF176
- b _080CF528
-_080CF176:
- str r0, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl HandleBattleWindow
- ldr r0, _080CF1B4 @ =gText_BattleYesNoChoice
- movs r1, 0xE
- bl BattlePutTextOnWindow
- ldr r0, _080CF1B0 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- movs r2, 0
- strh r0, [r1, 0x14]
- ldr r0, _080CF1B8 @ =gBattleCommunication
- strb r2, [r0, 0x1]
- bl BattleCreateYesNoCursorAt
- b _080CF528
- .align 2, 0
-_080CF1A8: .4byte gUnknown_83FDF3C
-_080CF1AC: .4byte gDisplayedStringBattle
-_080CF1B0: .4byte gTasks
-_080CF1B4: .4byte gText_BattleYesNoChoice
-_080CF1B8: .4byte gBattleCommunication
-_080CF1BC:
- ldr r0, _080CF244 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080CF1E2
- ldr r4, _080CF248 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _080CF1E2
- movs r0, 0x5
- bl PlaySE
- bl BattleDestroyYesNoCursorAt
- movs r0, 0
- strb r0, [r4, 0x1]
- bl BattleCreateYesNoCursorAt
-_080CF1E2:
- ldr r0, _080CF244 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CF208
- ldr r4, _080CF248 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _080CF208
- movs r0, 0x5
- bl PlaySE
- bl BattleDestroyYesNoCursorAt
- movs r0, 0x1
- strb r0, [r4, 0x1]
- bl BattleCreateYesNoCursorAt
-_080CF208:
- ldr r0, _080CF244 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _080CF276
- str r2, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl HandleBattleWindow
- movs r0, 0x5
- bl PlaySE
- ldr r0, _080CF248 @ =gBattleCommunication
- ldrb r2, [r0, 0x1]
- cmp r2, 0
- beq _080CF250
- ldr r0, _080CF24C @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- strh r0, [r1, 0x14]
- b _080CF276
- .align 2, 0
-_080CF244: .4byte gMain
-_080CF248: .4byte gBattleCommunication
-_080CF24C: .4byte gTasks
-_080CF250:
- ldr r0, _080CF2AC @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x16]
- strh r0, [r1, 0x14]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- bne _080CF276
- movs r0, 0x1
- negs r0, r0
- str r2, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_080CF276:
- ldr r0, _080CF2B0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _080CF284
- b _080CF528
-_080CF284:
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl HandleBattleWindow
- movs r0, 0x5
- bl PlaySE
- ldr r1, _080CF2AC @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x18]
- strh r1, [r0, 0x14]
- b _080CF528
- .align 2, 0
-_080CF2AC: .4byte gTasks
-_080CF2B0: .4byte gMain
-_080CF2B4:
- ldr r0, _080CF2F4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CF2C2
- b _080CF528
-_080CF2C2:
- bl FreeAllWindowBuffers
- ldr r0, _080CF2F8 @ =gPlayerParty
- ldr r1, _080CF2FC @ =gTasks
- mov r3, r8
- adds r5, r3, r7
- lsls r5, 3
- adds r5, r1
- ldrb r1, [r5, 0x1C]
- ldr r2, _080CF300 @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _080CF304 @ =CB2_EvolutionSceneLoadGraphics
- ldr r4, _080CF308 @ =gMoveToLearn
- ldrh r4, [r4]
- str r4, [sp]
- bl ShowSelectMovePokemonSummaryScreen
- ldrh r0, [r5, 0x14]
- adds r0, 0x1
- strh r0, [r5, 0x14]
- b _080CF528
- .align 2, 0
-_080CF2F4: .4byte gPaletteFade
-_080CF2F8: .4byte gPlayerParty
-_080CF2FC: .4byte gTasks
-_080CF300: .4byte gPlayerPartyCount
-_080CF304: .4byte CB2_EvolutionSceneLoadGraphics
-_080CF308: .4byte gMoveToLearn
-_080CF30C:
- ldr r0, _080CF340 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CF31A
- b _080CF528
-_080CF31A:
- ldr r1, [r5, 0x4]
- ldr r0, _080CF344 @ =sub_80CE710
- cmp r1, r0
- beq _080CF324
- b _080CF528
-_080CF324:
- bl sub_8138B2C
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x4
- bne _080CF34C
- ldr r0, _080CF348 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0xA
- b _080CF526
- .align 2, 0
-_080CF340: .4byte gPaletteFade
-_080CF344: .4byte sub_80CE710
-_080CF348: .4byte gTasks
-_080CF34C:
- adds r1, r6, 0
- adds r1, 0xD
- mov r0, r9
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl IsHMMove2
- cmp r0, 0
- beq _080CF398
- ldr r0, _080CF388 @ =gUnknown_83FDF3C
- ldr r3, _080CF38C @ =0x000004cc
- adds r0, r3
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF390 @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r1, _080CF394 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0xC
- strh r1, [r0, 0x14]
- b _080CF528
- .align 2, 0
-_080CF388: .4byte gUnknown_83FDF3C
-_080CF38C: .4byte 0x000004cc
-_080CF390: .4byte gDisplayedStringBattle
-_080CF394: .4byte gTasks
-_080CF398:
- ldr r1, _080CF3D4 @ =gBattleTextBuff2
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- strb r4, [r1, 0x2]
- lsrs r0, r4, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- lsls r4, r6, 24
- lsrs r4, 24
- mov r0, r9
- adds r1, r4, 0
- bl RemoveMonPPBonus
- ldr r0, _080CF3D8 @ =gMoveToLearn
- ldrh r1, [r0]
- mov r0, r9
- adds r2, r4, 0
- bl SetMonMoveSlot
- ldr r0, _080CF3DC @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080CF526
- .align 2, 0
-_080CF3D4: .4byte gBattleTextBuff2
-_080CF3D8: .4byte gMoveToLearn
-_080CF3DC: .4byte gTasks
-_080CF3E0:
- ldr r0, _080CF408 @ =gUnknown_83FDF3C
- movs r1, 0xCF
- lsls r1, 2
- adds r0, r1
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF40C @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CF410 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080CF526
- .align 2, 0
-_080CF408: .4byte gUnknown_83FDF3C
-_080CF40C: .4byte gDisplayedStringBattle
-_080CF410: .4byte gTasks
-_080CF414:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF422
- b _080CF528
-_080CF422:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CF42E
- b _080CF528
-_080CF42E:
- ldr r0, _080CF450 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x1C]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF454 @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CF458 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080CF526
- .align 2, 0
-_080CF450: .4byte gUnknown_83FDF3C
-_080CF454: .4byte gDisplayedStringBattle
-_080CF458: .4byte gTasks
-_080CF45C:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080CF528
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080CF528
- ldr r0, _080CF498 @ =gUnknown_83FDF3C
- movs r1, 0xD0
- lsls r1, 2
- adds r0, r1
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF49C @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r1, _080CF4A0 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0x14
- strh r1, [r0, 0x8]
- b _080CF528
- .align 2, 0
-_080CF498: .4byte gUnknown_83FDF3C
-_080CF49C: .4byte gDisplayedStringBattle
-_080CF4A0: .4byte gTasks
-_080CF4A4:
- ldr r0, _080CF4CC @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x20]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF4D0 @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r1, _080CF4D4 @ =gTasks
- mov r3, r8
- adds r0, r3, r7
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- movs r1, 0xB
- strh r1, [r0, 0x16]
- strh r2, [r0, 0x18]
- movs r1, 0x3
- strh r1, [r0, 0x14]
- b _080CF528
- .align 2, 0
-_080CF4CC: .4byte gUnknown_83FDF3C
-_080CF4D0: .4byte gDisplayedStringBattle
-_080CF4D4: .4byte gTasks
-_080CF4D8:
- ldr r0, _080CF4F8 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x24]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF4FC @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r1, _080CF500 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
-_080CF4F2:
- movs r1, 0xF
- strh r1, [r0, 0x8]
- b _080CF528
- .align 2, 0
-_080CF4F8: .4byte gUnknown_83FDF3C
-_080CF4FC: .4byte gDisplayedStringBattle
-_080CF500: .4byte gTasks
-_080CF504:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080CF528
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080CF528
- ldr r0, _080CF538 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x5
-_080CF526:
- strh r0, [r1, 0x14]
-_080CF528:
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CF538: .4byte gTasks
- thumb_func_end sub_80CE8DC
-
- thumb_func_start sub_80CF53C
-sub_80CF53C: @ 80CF53C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x20
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, _080CF5BC @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r4, r0, r5
- movs r0, 0x1C
- ldrsh r1, [r4, r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080CF5C0 @ =gPlayerParty
- adds r1, r0
- mov r8, r1
- bl IsNationalPokedexEnabled
- cmp r0, 0
- bne _080CF598
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- bne _080CF598
- movs r3, 0xC
- ldrsh r0, [r4, r3]
- cmp r0, 0x97
- ble _080CF598
- movs r0, 0xF
- strh r0, [r4, 0x8]
- movs r2, 0x1
- strh r2, [r4, 0x1A]
- ldr r0, _080CF5C4 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r1, r0, r5
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CF598
- strh r2, [r1, 0x18]
- bl sub_80D04A8
-_080CF598:
- ldr r0, _080CF5BC @ =gTasks
- lsls r2, r6, 2
- adds r1, r2, r6
- lsls r1, 3
- adds r1, r0
- movs r3, 0x8
- ldrsh r1, [r1, r3]
- adds r5, r0, 0
- adds r7, r2, 0
- cmp r1, 0x14
- bls _080CF5B2
- bl _080D003A
-_080CF5B2:
- lsls r0, r1, 2
- ldr r1, _080CF5C8 @ =_080CF5CC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CF5BC: .4byte gTasks
-_080CF5C0: .4byte gPlayerParty
-_080CF5C4: .4byte gBattleCommunication
-_080CF5C8: .4byte _080CF5CC
- .align 2, 0
-_080CF5CC:
- .4byte _080CF620
- .4byte _080CF64C
- .4byte _080CF66C
- .4byte _080CF69C
- .4byte _080CF6D0
- .4byte _080CF73C
- .4byte _080CF778
- .4byte _080CF7AC
- .4byte _080CF7EC
- .4byte _080CF808
- .4byte _080CF838
- .4byte _080CF860
- .4byte _080CF89C
- .4byte _080CF924
- .4byte _080CF9D0
- .4byte _080CFA14
- .4byte _080CFA74
- .4byte _080CFA9C
- .4byte _080CFAD8
- .4byte _080CFB34
- .4byte _080CFB70
-_080CF620:
- ldr r4, _080CF640 @ =gStringVar4
- ldr r1, _080CF644 @ =gUnknown_83FE672
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CF648 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- b _080CFB1A
- .align 2, 0
-_080CF640: .4byte gStringVar4
-_080CF644: .4byte gUnknown_83FE672
-_080CF648: .4byte gTasks
-_080CF64C:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF65C
- bl _080D003A
-_080CF65C:
- ldr r0, _080CF668 @ =gTasks
- adds r4, r7, r6
- lsls r4, 3
- adds r4, r0
- b _080CFA88
- .align 2, 0
-_080CF668: .4byte gTasks
-_080CF66C:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _080CF67A
- bl _080D003A
-_080CF67A:
- movs r0, 0x84
- lsls r0, 1
- bl m4aSongNumStop
- ldr r0, _080CF694 @ =0x00000107
- bl PlaySE
- ldr r0, _080CF698 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- b _080CFB1A
- .align 2, 0
-_080CF694: .4byte 0x00000107
-_080CF698: .4byte gTasks
-_080CF69C:
- bl IsSEPlaying
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080CF6AC
- bl _080D003A
-_080CF6AC:
- movs r0, 0x84
- lsls r0, 1
- bl PlayBGM
- ldr r0, _080CF6CC @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- str r4, [sp]
- movs r0, 0x1C
- movs r1, 0x4
- b _080CFD56
- .align 2, 0
-_080CF6CC: .4byte gTasks
-_080CF6D0:
- ldr r0, _080CF724 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CF6E0
- bl _080D003A
-_080CF6E0:
- movs r0, 0x1
- bl InitMovingBackgroundTask
- ldr r2, _080CF728 @ =gSprites
- ldr r0, _080CF72C @ =gUnknown_2039A20
- ldr r0, [r0]
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x5]
- lsrs r0, 4
- adds r5, r0, 0
- adds r5, 0x10
- adds r0, r5, 0
- bl LaunchTask_PreEvoSparklesSet1
- ldr r1, _080CF730 @ =gBattleCommunication
- strb r0, [r1, 0x2]
- ldr r0, _080CF734 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- ldr r1, _080CF738 @ =0x00000603
- movs r0, 0xE
- bl SetGpuReg
- bl _080D003A
- .align 2, 0
-_080CF724: .4byte gPaletteFade
-_080CF728: .4byte gSprites
-_080CF72C: .4byte gUnknown_2039A20
-_080CF730: .4byte gBattleCommunication
-_080CF734: .4byte gTasks
-_080CF738: .4byte 0x00000603
-_080CF73C:
- ldr r4, _080CF770 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CF752
- bl _080D003A
-_080CF752:
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r5
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- ldr r0, _080CF774 @ =gUnknown_2039A20
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1, 0x3]
- bl sub_80F5EC0
- strb r0, [r4, 0x2]
- bl _080D003A
- .align 2, 0
-_080CF770: .4byte gBattleCommunication
-_080CF774: .4byte gUnknown_2039A20
-_080CF778:
- ldr r4, _080CF7A4 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CF78E
- bl _080D003A
-_080CF78E:
- ldr r0, _080CF7A8 @ =gUnknown_2039A20
- ldr r1, [r0]
- ldrb r0, [r1]
- ldrb r1, [r1, 0x1]
- bl sub_80F62B4
- strb r0, [r4, 0x2]
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r5
- b _080CFB1A
- .align 2, 0
-_080CF7A4: .4byte gBattleCommunication
-_080CF7A8: .4byte gUnknown_2039A20
-_080CF7AC:
- ldr r2, _080CF7E4 @ =gUnknown_2039A20
- ldr r1, [r2]
- ldrb r0, [r1, 0x3]
- subs r0, 0x1
- strb r0, [r1, 0x3]
- lsls r0, 24
- cmp r0, 0
- beq _080CF7C0
- bl _080D003A
-_080CF7C0:
- ldr r1, [r2]
- movs r0, 0x3
- strb r0, [r1, 0x3]
- ldr r0, _080CF7E8 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080CF7DC
- bl _080D003A
-_080CF7DC:
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r5
- b _080CFB1A
- .align 2, 0
-_080CF7E4: .4byte gUnknown_2039A20
-_080CF7E8: .4byte gBattleCommunication
-_080CF7EC:
- bl sub_80F5F74
- ldr r1, _080CF800 @ =gBattleCommunication
- strb r0, [r1, 0x2]
- ldr r0, _080CF804 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- b _080CFB1A
- .align 2, 0
-_080CF800: .4byte gBattleCommunication
-_080CF804: .4byte gTasks
-_080CF808:
- ldr r0, _080CF834 @ =gBattleCommunication
- mov r8, r0
- ldrb r0, [r0, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CF820
- bl _080D003A
-_080CF820:
- adds r4, r7, r6
- lsls r4, 3
- adds r4, r5
- ldrh r0, [r4, 0xC]
- bl sub_80F6190
- mov r1, r8
- strb r0, [r1, 0x2]
- b _080CFA90
- .align 2, 0
-_080CF834: .4byte gBattleCommunication
-_080CF838:
- ldr r0, _080CF85C @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080CF84E
- bl _080D003A
-_080CF84E:
- movs r0, 0x1B
- bl PlaySE
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r5
- b _080CFB1A
- .align 2, 0
-_080CF85C: .4byte gBattleCommunication
-_080CF860:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080CF86E
- bl _080D003A
-_080CF86E:
- ldr r0, _080CF890 @ =gTasks
- adds r4, r7, r6
- lsls r4, 3
- adds r4, r0
- ldrh r0, [r4, 0xC]
- movs r1, 0
- bl PlayCry1
- ldr r0, _080CF894 @ =gPlttBufferUnfaded + 0x40
- ldr r1, _080CF898 @ =gUnknown_2039A20
- ldr r1, [r1]
- adds r1, 0x4
- movs r2, 0x60
- bl memcpy
- b _080CFA90
- .align 2, 0
-_080CF890: .4byte gTasks
-_080CF894: .4byte gPlttBufferUnfaded + 0x40
-_080CF898: .4byte gUnknown_2039A20
-_080CF89C:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _080CF8A8
- b _080D003A
-_080CF8A8:
- ldr r4, _080CF914 @ =gStringVar4
- ldr r1, _080CF918 @ =gUnknown_83FE688
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CF91C @ =0x00000103
- bl PlayFanfare
- ldr r2, _080CF920 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r4, r1, r2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- adds r2, r1
- adds r2, 0xC
- mov r0, r8
- movs r1, 0xB
- bl SetMonData
- mov r0, r8
- bl CalculateMonStats
- ldrh r1, [r4, 0xA]
- ldrh r2, [r4, 0xC]
- mov r0, r8
- bl EvolutionRenameMon
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2
- bl GetSetPokedexFlag
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl GetSetPokedexFlag
- movs r0, 0xE
- bl IncrementGameStat
- b _080D003A
- .align 2, 0
-_080CF914: .4byte gStringVar4
-_080CF918: .4byte gUnknown_83FE688
-_080CF91C: .4byte 0x00000103
-_080CF920: .4byte gTasks
-_080CF924:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF932
- b _080D003A
-_080CF932:
- bl IsFanfareTaskInactive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080CF940
- b _080D003A
-_080CF940:
- ldr r1, _080CF98C @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r4, r0, r1
- ldrb r1, [r4, 0x10]
- mov r0, r8
- bl MonTryLearningNewMove
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0
- beq _080CF9AC
- movs r3, 0x1A
- ldrsh r2, [r4, r3]
- cmp r2, 0
- bne _080CF9AC
- ldrh r1, [r4, 0xE]
- movs r0, 0x80
- orrs r0, r1
- strh r0, [r4, 0xE]
- strh r2, [r4, 0x10]
- strh r2, [r4, 0x14]
- mov r0, r8
- movs r1, 0x2
- add r2, sp, 0xC
- bl GetMonData
- ldr r0, _080CF990 @ =gBattleTextBuff1
- add r1, sp, 0xC
- bl StringCopy10
- ldr r0, _080CF994 @ =0x0000ffff
- cmp r5, r0
- bne _080CF998
- movs r0, 0x14
- strh r0, [r4, 0x8]
- b _080D003A
- .align 2, 0
-_080CF98C: .4byte gTasks
-_080CF990: .4byte gBattleTextBuff1
-_080CF994: .4byte 0x0000ffff
-_080CF998:
- ldr r0, _080CF9A8 @ =0x0000fffe
- cmp r5, r0
- bne _080CF9A0
- b _080D003A
-_080CF9A0:
- movs r0, 0x12
- strh r0, [r4, 0x8]
- b _080D003A
- .align 2, 0
-_080CF9A8: .4byte 0x0000fffe
-_080CF9AC:
- movs r0, 0x84
- lsls r0, 1
- bl PlayBGM
- ldr r1, _080CF9C8 @ =gUnknown_841E325
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CF9CC @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- b _080CFB1A
- .align 2, 0
-_080CF9C8: .4byte gUnknown_841E325
-_080CF9CC: .4byte gTasks
-_080CF9D0:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0
- beq _080CF9E0
- b _080D003A
-_080CF9E0:
- adds r0, r6, 0
- bl DestroyTask
- ldr r4, _080CFA08 @ =gUnknown_2039A20
- ldr r0, [r4]
- bl Free
- str r5, [r4]
- ldr r2, _080CFA0C @ =gTextFlags
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, _080CFA10 @ =gCB2_AfterEvolution
- ldr r0, [r0]
- bl SetMainCallback2
- b _080D003A
- .align 2, 0
-_080CFA08: .4byte gUnknown_2039A20
-_080CFA0C: .4byte gTextFlags
-_080CFA10: .4byte gCB2_AfterEvolution
-_080CFA14:
- ldr r0, _080CFA60 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080CFA28
- b _080D003A
-_080CFA28:
- bl m4aMPlayAllStop
- ldr r2, _080CFA64 @ =gSprites
- ldr r0, _080CFA68 @ =gUnknown_2039A20
- ldr r0, [r0]
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x5]
- lsrs r1, 4
- adds r1, 0x10
- movs r0, 0x1
- lsls r0, r1
- ldr r1, _080CFA6C @ =0x0004001c
- orrs r0, r1
- ldr r1, _080CFA70 @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r5
- b _080CFB1A
- .align 2, 0
-_080CFA60: .4byte gBattleCommunication
-_080CFA64: .4byte gSprites
-_080CFA68: .4byte gUnknown_2039A20
-_080CFA6C: .4byte 0x0004001c
-_080CFA70: .4byte 0x00007fff
-_080CFA74:
- ldr r0, _080CFA98 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CFA82
- b _080D003A
-_080CFA82:
- adds r4, r7, r6
- lsls r4, 3
- adds r4, r5
-_080CFA88:
- ldrh r0, [r4, 0xA]
- movs r1, 0
- bl PlayCry1
-_080CFA90:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080D003A
- .align 2, 0
-_080CFA98: .4byte gPaletteFade
-_080CFA9C:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _080CFAA8
- b _080D003A
-_080CFAA8:
- ldr r4, _080CFACC @ =gStringVar4
- ldr r1, _080CFAD0 @ =gUnknown_83FE6D0
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080CFAD4 @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- movs r1, 0x1
- strh r1, [r0, 0x1A]
- b _080D0006
- .align 2, 0
-_080CFACC: .4byte gStringVar4
-_080CFAD0: .4byte gUnknown_83FE6D0
-_080CFAD4: .4byte gTasks
-_080CFAD8:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CFAE6
- b _080D003A
-_080CFAE6:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CFAF2
- b _080D003A
-_080CFAF2:
- bl BufferMoveToLearnIntoBattleTextBuff2
- ldr r0, _080CFB24 @ =0x00000101
- bl PlayFanfare
- ldr r0, _080CFB28 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0xC]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFB2C @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CFB30 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0x40
- strh r0, [r1, 0x10]
-_080CFB1A:
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _080D003A
- .align 2, 0
-_080CFB24: .4byte 0x00000101
-_080CFB28: .4byte gUnknown_83FDF3C
-_080CFB2C: .4byte gDisplayedStringBattle
-_080CFB30: .4byte gTasks
-_080CFB34:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CFB42
- b _080D003A
-_080CFB42:
- bl IsFanfareTaskInactive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080CFB50
- b _080D003A
-_080CFB50:
- ldr r0, _080CFB6C @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x10]
- subs r0, 0x1
- strh r0, [r1, 0x10]
- lsls r0, 16
- cmp r0, 0
- beq _080CFB66
- b _080D003A
-_080CFB66:
- movs r0, 0xD
- strh r0, [r1, 0x8]
- b _080D003A
- .align 2, 0
-_080CFB6C: .4byte gTasks
-_080CFB70:
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r5
- movs r1, 0x14
- ldrsh r0, [r0, r1]
- cmp r0, 0xB
- bls _080CFB80
- b _080D003A
-_080CFB80:
- lsls r0, 2
- ldr r1, _080CFB8C @ =_080CFB90
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CFB8C: .4byte _080CFB90
- .align 2, 0
-_080CFB90:
- .4byte _080CFBC0
- .4byte _080CFC0C
- .4byte _080CFC54
- .4byte _080CFC92
- .4byte _080CFCFC
- .4byte _080CFDAC
- .4byte _080CFE30
- .4byte _080CFF28
- .4byte _080CFF70
- .4byte _080CFFB8
- .4byte _080CFFEC
- .4byte _080D0018
-_080CFBC0:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CFBCE
- b _080D003A
-_080CFBCE:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CFBDA
- b _080D003A
-_080CFBDA:
- bl BufferMoveToLearnIntoBattleTextBuff2
- ldr r0, _080CFC00 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x10]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFC04 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CFC08 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080D0038
- .align 2, 0
-_080CFC00: .4byte gUnknown_83FDF3C
-_080CFC04: .4byte gDisplayedStringBattle
-_080CFC08: .4byte gTasks
-_080CFC0C:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CFC1A
- b _080D003A
-_080CFC1A:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CFC26
- b _080D003A
-_080CFC26:
- ldr r0, _080CFC48 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x14]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFC4C @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CFC50 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080D0038
- .align 2, 0
-_080CFC48: .4byte gUnknown_83FDF3C
-_080CFC4C: .4byte gDisplayedStringBattle
-_080CFC50: .4byte gTasks
-_080CFC54:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080CFC92
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080CFC92
- ldr r0, _080CFCE8 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x18]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFCEC @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CFCF0 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0x5
- strh r0, [r1, 0x16]
- movs r0, 0x9
- strh r0, [r1, 0x18]
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- strh r0, [r1, 0x14]
-_080CFC92:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CFCA0
- b _080D003A
-_080CFCA0:
- bl IsSEPlaying
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080CFCAE
- b _080D003A
-_080CFCAE:
- movs r0, 0
- movs r1, 0xA8
- movs r2, 0xE0
- bl LoadUserWindowBorderGfx
- ldr r0, _080CFCF4 @ =gUnknown_826D1CC
- movs r1, 0xA8
- str r1, [sp]
- movs r1, 0xE
- str r1, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r1, 0x3
- movs r2, 0
- movs r3, 0x2
- bl CreateYesNoMenu
- ldr r3, _080CFCF8 @ =gBattleCommunication
- strb r4, [r3, 0x1]
- ldr r0, _080CFCF0 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- movs r2, 0
- strh r0, [r1, 0x14]
- strb r2, [r3, 0x1]
- b _080D003A
- .align 2, 0
-_080CFCE8: .4byte gUnknown_83FDF3C
-_080CFCEC: .4byte gDisplayedStringBattle
-_080CFCF0: .4byte gTasks
-_080CFCF4: .4byte gUnknown_826D1CC
-_080CFCF8: .4byte gBattleCommunication
-_080CFCFC:
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r4, r0, 24
- cmp r4, 0
- beq _080CFD1C
- cmp r4, 0
- bgt _080CFD16
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- beq _080CFD70
- b _080D003A
-_080CFD16:
- cmp r4, 0x1
- beq _080CFD70
- b _080D003A
-_080CFD1C:
- ldr r0, _080CFD60 @ =gBattleCommunication
- strb r4, [r0, 0x1]
- ldr r0, _080CFD64 @ =gUnknown_83FDF3C
- movs r3, 0x92
- lsls r3, 3
- adds r0, r3
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFD68 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080CFD6C @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x16]
- strh r1, [r0, 0x14]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0x5
- beq _080CFD4E
- b _080D003A
-_080CFD4E:
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
-_080CFD56:
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- b _080D003A
- .align 2, 0
-_080CFD60: .4byte gBattleCommunication
-_080CFD64: .4byte gUnknown_83FDF3C
-_080CFD68: .4byte gDisplayedStringBattle
-_080CFD6C: .4byte gTasks
-_080CFD70:
- ldr r1, _080CFD9C @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x1]
- ldr r0, _080CFDA0 @ =gUnknown_83FDF3C
- movs r1, 0x92
- lsls r1, 3
- adds r0, r1
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFDA4 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080CFDA8 @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x18]
- strh r1, [r0, 0x14]
- b _080D003A
- .align 2, 0
-_080CFD9C: .4byte gBattleCommunication
-_080CFDA0: .4byte gUnknown_83FDF3C
-_080CFDA4: .4byte gDisplayedStringBattle
-_080CFDA8: .4byte gTasks
-_080CFDAC:
- ldr r0, _080CFE14 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CFDBA
- b _080D003A
-_080CFDBA:
- ldr r0, _080CFE18 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _080CFDC6
- bl DestroyWirelessStatusIndicatorSprite
-_080CFDC6:
- movs r0, 0x3
- bl GetBgTilemapBuffer
- bl Free
- movs r0, 0x1
- bl GetBgTilemapBuffer
- bl Free
- movs r0, 0
- bl GetBgTilemapBuffer
- bl Free
- bl FreeAllWindowBuffers
- ldr r0, _080CFE1C @ =gPlayerParty
- ldr r1, _080CFE20 @ =gTasks
- adds r5, r7, r6
- lsls r5, 3
- adds r5, r1
- ldrb r1, [r5, 0x1C]
- ldr r2, _080CFE24 @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _080CFE28 @ =CB2_TradeEvolutionSceneLoadGraphics
- ldr r4, _080CFE2C @ =gMoveToLearn
- ldrh r4, [r4]
- str r4, [sp]
- bl ShowSelectMovePokemonSummaryScreen
- ldrh r0, [r5, 0x14]
- adds r0, 0x1
- strh r0, [r5, 0x14]
- b _080D003A
- .align 2, 0
-_080CFE14: .4byte gPaletteFade
-_080CFE18: .4byte gWirelessCommType
-_080CFE1C: .4byte gPlayerParty
-_080CFE20: .4byte gTasks
-_080CFE24: .4byte gPlayerPartyCount
-_080CFE28: .4byte CB2_TradeEvolutionSceneLoadGraphics
-_080CFE2C: .4byte gMoveToLearn
-_080CFE30:
- ldr r0, _080CFE64 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CFE3E
- b _080D003A
-_080CFE3E:
- ldr r0, _080CFE68 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _080CFE6C @ =sub_80CE72C
- cmp r1, r0
- beq _080CFE4A
- b _080D003A
-_080CFE4A:
- bl sub_8138B2C
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x4
- bne _080CFE74
- ldr r0, _080CFE70 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0x9
- b _080D0038
- .align 2, 0
-_080CFE64: .4byte gPaletteFade
-_080CFE68: .4byte gMain
-_080CFE6C: .4byte sub_80CE72C
-_080CFE70: .4byte gTasks
-_080CFE74:
- adds r1, r5, 0
- adds r1, 0xD
- mov r0, r8
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl IsHMMove2
- cmp r0, 0
- beq _080CFEC0
- ldr r0, _080CFEB0 @ =gUnknown_83FDF3C
- ldr r3, _080CFEB4 @ =0x000004cc
- adds r0, r3
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFEB8 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080CFEBC @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- movs r1, 0xB
- strh r1, [r0, 0x14]
- b _080D003A
- .align 2, 0
-_080CFEB0: .4byte gUnknown_83FDF3C
-_080CFEB4: .4byte 0x000004cc
-_080CFEB8: .4byte gDisplayedStringBattle
-_080CFEBC: .4byte gTasks
-_080CFEC0:
- ldr r1, _080CFF14 @ =gBattleTextBuff2
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- strb r4, [r1, 0x2]
- lsrs r0, r4, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- lsls r4, r5, 24
- lsrs r4, 24
- mov r0, r8
- adds r1, r4, 0
- bl RemoveMonPPBonus
- ldr r0, _080CFF18 @ =gMoveToLearn
- ldrh r1, [r0]
- mov r0, r8
- adds r2, r4, 0
- bl SetMonMoveSlot
- ldr r0, _080CFF1C @ =gUnknown_83FDF3C
- movs r1, 0xCF
- lsls r1, 2
- adds r0, r1
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFF20 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CFF24 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080D0038
- .align 2, 0
-_080CFF14: .4byte gBattleTextBuff2
-_080CFF18: .4byte gMoveToLearn
-_080CFF1C: .4byte gUnknown_83FDF3C
-_080CFF20: .4byte gDisplayedStringBattle
-_080CFF24: .4byte gTasks
-_080CFF28:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CFF36
- b _080D003A
-_080CFF36:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CFF42
- b _080D003A
-_080CFF42:
- ldr r0, _080CFF64 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x1C]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFF68 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CFF6C @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080D0038
- .align 2, 0
-_080CFF64: .4byte gUnknown_83FDF3C
-_080CFF68: .4byte gDisplayedStringBattle
-_080CFF6C: .4byte gTasks
-_080CFF70:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080D003A
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080D003A
- ldr r0, _080CFFAC @ =gUnknown_83FDF3C
- movs r3, 0xD0
- lsls r3, 2
- adds r0, r3
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFFB0 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080CFFB4 @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- movs r1, 0x12
- strh r1, [r0, 0x8]
- b _080D003A
- .align 2, 0
-_080CFFAC: .4byte gUnknown_83FDF3C
-_080CFFB0: .4byte gDisplayedStringBattle
-_080CFFB4: .4byte gTasks
-_080CFFB8:
- ldr r0, _080CFFE0 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x20]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFFE4 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080CFFE8 @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- movs r1, 0xA
- strh r1, [r0, 0x16]
- strh r2, [r0, 0x18]
- movs r1, 0x3
- strh r1, [r0, 0x14]
- b _080D003A
- .align 2, 0
-_080CFFE0: .4byte gUnknown_83FDF3C
-_080CFFE4: .4byte gDisplayedStringBattle
-_080CFFE8: .4byte gTasks
-_080CFFEC:
- ldr r0, _080D000C @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x24]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080D0010 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080D0014 @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
-_080D0006:
- movs r1, 0xD
- strh r1, [r0, 0x8]
- b _080D003A
- .align 2, 0
-_080D000C: .4byte gUnknown_83FDF3C
-_080D0010: .4byte gDisplayedStringBattle
-_080D0014: .4byte gTasks
-_080D0018:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080D003A
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080D003A
- ldr r0, _080D0048 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0x5
-_080D0038:
- strh r0, [r1, 0x14]
-_080D003A:
- add sp, 0x20
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0048: .4byte gTasks
- thumb_func_end sub_80CF53C
-
- thumb_func_start nullsub_76
-nullsub_76: @ 80D004C
- bx lr
- thumb_func_end nullsub_76
-
- thumb_func_start sub_80D0050
-sub_80D0050: @ 80D0050
- push {lr}
- ldr r0, _080D00B8 @ =gBattle_BG0_X
- ldrh r1, [r0]
- movs r0, 0x10
- bl SetGpuReg
- ldr r0, _080D00BC @ =gBattle_BG0_Y
- ldrh r1, [r0]
- movs r0, 0x12
- bl SetGpuReg
- ldr r0, _080D00C0 @ =gBattle_BG1_X
- ldrh r1, [r0]
- movs r0, 0x14
- bl SetGpuReg
- ldr r0, _080D00C4 @ =gBattle_BG1_Y
- ldrh r1, [r0]
- movs r0, 0x16
- bl SetGpuReg
- ldr r0, _080D00C8 @ =gBattle_BG2_X
- ldrh r1, [r0]
- movs r0, 0x18
- bl SetGpuReg
- ldr r0, _080D00CC @ =gBattle_BG2_Y
- ldrh r1, [r0]
- movs r0, 0x1A
- bl SetGpuReg
- ldr r0, _080D00D0 @ =gBattle_BG3_X
- ldrh r1, [r0]
- movs r0, 0x1C
- bl SetGpuReg
- ldr r0, _080D00D4 @ =gBattle_BG3_Y
- ldrh r1, [r0]
- movs r0, 0x1E
- bl SetGpuReg
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- bl ScanlineEffect_InitHBlankDmaTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_080D00B8: .4byte gBattle_BG0_X
-_080D00BC: .4byte gBattle_BG0_Y
-_080D00C0: .4byte gBattle_BG1_X
-_080D00C4: .4byte gBattle_BG1_Y
-_080D00C8: .4byte gBattle_BG2_X
-_080D00CC: .4byte gBattle_BG2_Y
-_080D00D0: .4byte gBattle_BG3_X
-_080D00D4: .4byte gBattle_BG3_Y
- thumb_func_end sub_80D0050
-
- thumb_func_start sub_80D00D8
-sub_80D00D8: @ 80D00D8
- push {lr}
- ldr r0, _080D0140 @ =gBattle_BG0_X
- ldrh r1, [r0]
- movs r0, 0x10
- bl SetGpuReg
- ldr r0, _080D0144 @ =gBattle_BG0_Y
- ldrh r1, [r0]
- movs r0, 0x12
- bl SetGpuReg
- ldr r0, _080D0148 @ =gBattle_BG1_X
- ldrh r1, [r0]
- movs r0, 0x14
- bl SetGpuReg
- ldr r0, _080D014C @ =gBattle_BG1_Y
- ldrh r1, [r0]
- movs r0, 0x16
- bl SetGpuReg
- ldr r0, _080D0150 @ =gBattle_BG2_X
- ldrh r1, [r0]
- movs r0, 0x18
- bl SetGpuReg
- ldr r0, _080D0154 @ =gBattle_BG2_Y
- ldrh r1, [r0]
- movs r0, 0x1A
- bl SetGpuReg
- ldr r0, _080D0158 @ =gBattle_BG3_X
- ldrh r1, [r0]
- movs r0, 0x1C
- bl SetGpuReg
- ldr r0, _080D015C @ =gBattle_BG3_Y
- ldrh r1, [r0]
- movs r0, 0x1E
- bl SetGpuReg
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- bl ScanlineEffect_InitHBlankDmaTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_080D0140: .4byte gBattle_BG0_X
-_080D0144: .4byte gBattle_BG0_Y
-_080D0148: .4byte gBattle_BG1_X
-_080D014C: .4byte gBattle_BG1_Y
-_080D0150: .4byte gBattle_BG2_X
-_080D0154: .4byte gBattle_BG2_Y
-_080D0158: .4byte gBattle_BG3_X
-_080D015C: .4byte gBattle_BG3_Y
- thumb_func_end sub_80D00D8
-
- thumb_func_start sub_80D0160
-sub_80D0160: @ 80D0160
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _080D01E0 @ =gTasks+0x8
- adds r4, r0, r1
- movs r0, 0xC
- ldrsh r5, [r4, r0]
- cmp r5, 0
- bne _080D020E
- ldrh r0, [r4, 0xA]
- adds r1, r0, 0x1
- strh r1, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _080D020E
- ldrh r1, [r4]
- adds r0, r1, 0x1
- strh r0, [r4]
- lsls r1, 16
- asrs r1, 16
- ldr r3, _080D01E4 @ =gUnknown_83F846D
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- lsls r2, r0, 2
- adds r0, r3, 0x3
- adds r0, r2, r0
- ldrb r0, [r0]
- cmp r1, r0
- ble _080D0200
- adds r0, r3, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- cmp r0, r1
- bne _080D01E8
- ldrh r0, [r4, 0x6]
- adds r0, 0x1
- strh r0, [r4, 0x6]
- movs r0, 0x6
- ldrsh r2, [r4, r0]
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r1, r3, 0x2
- adds r0, r1
- ldrb r0, [r0]
- cmp r2, r0
- bne _080D01D2
- strh r5, [r4, 0x6]
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
-_080D01D2:
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0]
- b _080D01FE
- .align 2, 0
-_080D01E0: .4byte gTasks+0x8
-_080D01E4: .4byte gUnknown_83F846D
-_080D01E8:
- ldr r0, _080D0214 @ =gUnknown_2039A24
- lsls r1, 5
- ldr r0, [r0]
- adds r0, r1
- movs r1, 0xA0
- movs r2, 0x20
- bl LoadPalette
- strh r5, [r4]
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
-_080D01FE:
- strh r0, [r4, 0x2]
-_080D0200:
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bne _080D020E
- adds r0, r6, 0
- bl DestroyTask
-_080D020E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0214: .4byte gUnknown_2039A24
- thumb_func_end sub_80D0160
-
- thumb_func_start sub_80D0218
-sub_80D0218: @ 80D0218
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080D023C @ =sub_80D025C
- movs r1, 0x7
- bl CreateTask
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r4, 0
- bne _080D0244
- ldr r1, _080D0240 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- strh r4, [r0, 0xC]
- b _080D0252
- .align 2, 0
-_080D023C: .4byte sub_80D025C
-_080D0240: .4byte gTasks
-_080D0244:
- ldr r0, _080D0258 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0xC]
-_080D0252:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0258: .4byte gTasks
- thumb_func_end sub_80D0218
-
- thumb_func_start sub_80D025C
-sub_80D025C: @ 80D025C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080D0288 @ =gBattle_BG1_X
- mov r8, r0
- ldr r1, _080D028C @ =gBattle_BG1_Y
- mov r9, r1
- ldr r1, _080D0290 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r2, 0xC
- ldrsh r0, [r0, r2]
- cmp r0, 0
- bne _080D029C
- ldr r7, _080D0294 @ =gBattle_BG2_X
- ldr r6, _080D0298 @ =gBattle_BG2_Y
- b _080D02A0
- .align 2, 0
-_080D0288: .4byte gBattle_BG1_X
-_080D028C: .4byte gBattle_BG1_Y
-_080D0290: .4byte gTasks
-_080D0294: .4byte gBattle_BG2_X
-_080D0298: .4byte gBattle_BG2_Y
-_080D029C:
- ldr r7, _080D0328 @ =gBattle_BG3_X
- ldr r6, _080D032C @ =gBattle_BG3_Y
-_080D02A0:
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r1
- ldrh r0, [r4, 0x8]
- adds r0, 0x5
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x8]
- adds r0, 0x80
- ands r0, r1
- strh r0, [r4, 0xA]
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- movs r1, 0x4
- bl Cos
- adds r0, 0x8
- mov r2, r8
- strh r0, [r2]
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- movs r1, 0x4
- bl Sin
- adds r0, 0x10
- mov r2, r9
- strh r0, [r2]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- movs r1, 0x4
- bl Cos
- adds r0, 0x8
- strh r0, [r7]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- movs r1, 0x4
- bl Sin
- adds r0, 0x10
- strh r0, [r6]
- ldr r0, _080D0330 @ =sub_80D0160
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080D031A
- adds r0, r5, 0
- bl DestroyTask
- mov r0, r8
- strh r4, [r0]
- mov r1, r9
- strh r4, [r1]
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r7]
- strh r4, [r6]
-_080D031A:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0328: .4byte gBattle_BG3_X
-_080D032C: .4byte gBattle_BG3_Y
-_080D0330: .4byte sub_80D0160
- thumb_func_end sub_80D025C
-
- thumb_func_start InitMovingBgValues
-InitMovingBgValues: @ 80D0334
- push {r4-r7,lr}
- adds r6, r0, 0
- movs r1, 0
- ldr r5, _080D036C @ =gUnknown_83F8400
- ldr r7, _080D0370 @ =gUnknown_83F847D
-_080D033E:
- lsls r0, r1, 4
- adds r4, r1, 0x1
- adds r2, r0, r7
- lsls r0, r1, 5
- adds r1, r0, r6
- movs r3, 0xF
-_080D034A:
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strh r0, [r1]
- adds r2, 0x1
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _080D034A
- adds r1, r4, 0
- cmp r1, 0x31
- ble _080D033E
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D036C: .4byte gUnknown_83F8400
-_080D0370: .4byte gUnknown_83F847D
- thumb_func_end InitMovingBgValues
-
- thumb_func_start InitMovingBackgroundTask
-InitMovingBackgroundTask: @ 80D0374
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, _080D0398 @ =gUnknown_2039A24
- movs r0, 0xC8
- lsls r0, 3
- bl AllocZeroed
- str r0, [r4]
- bl InitMovingBgValues
- cmp r5, 0
- bne _080D039C
- movs r6, 0x1
- movs r4, 0x2
- b _080D03A0
- .align 2, 0
-_080D0398: .4byte gUnknown_2039A24
-_080D039C:
- movs r6, 0x1
- movs r4, 0x3
-_080D03A0:
- ldr r0, _080D0420 @ =gUnknown_83F7D60
- movs r1, 0xA0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _080D0424 @ =gUnknown_83F6CB0
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl DecompressAndLoadBgGfxUsingHeap
- ldr r1, _080D0428 @ =gUnknown_83F73A8
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- ldr r1, _080D042C @ =gUnknown_83F788C
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- adds r0, r4, 0
- bl CopyBgTilemapBufferToVram
- cmp r5, 0
- bne _080D0438
- ldr r1, _080D0430 @ =0x00000442
- movs r0, 0x50
- bl SetGpuReg
- ldr r1, _080D0434 @ =0x00000808
- movs r0, 0x52
- bl SetGpuReg
- movs r1, 0xBA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- adds r0, r6, 0
- movs r1, 0x7
- movs r2, 0x2
- bl SetBgAttribute
- adds r0, r4, 0
- movs r1, 0x7
- movs r2, 0x2
- bl SetBgAttribute
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- b _080D0452
- .align 2, 0
-_080D0420: .4byte gUnknown_83F7D60
-_080D0424: .4byte gUnknown_83F6CB0
-_080D0428: .4byte gUnknown_83F73A8
-_080D042C: .4byte gUnknown_83F788C
-_080D0430: .4byte 0x00000442
-_080D0434: .4byte 0x00000808
-_080D0438:
- ldr r1, _080D0468 @ =0x00000842
- movs r0, 0x50
- bl SetGpuReg
- ldr r1, _080D046C @ =0x00000808
- movs r0, 0x52
- bl SetGpuReg
- movs r1, 0xDA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
-_080D0452:
- ldr r0, _080D0470 @ =sub_80D0160
- movs r1, 0x5
- bl CreateTask
- adds r0, r5, 0
- bl sub_80D0218
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0468: .4byte 0x00000842
-_080D046C: .4byte 0x00000808
-_080D0470: .4byte sub_80D0160
- thumb_func_end InitMovingBackgroundTask
-
- thumb_func_start sub_80D0474
-sub_80D0474: @ 80D0474
- push {lr}
- ldr r0, _080D04A0 @ =sub_80D0160
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _080D0492
- ldr r0, _080D04A4 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x14]
-_080D0492:
- movs r0, 0
- movs r1, 0xA0
- movs r2, 0x20
- bl FillPalette
- pop {r0}
- bx r0
- .align 2, 0
-_080D04A0: .4byte sub_80D0160
-_080D04A4: .4byte gTasks
- thumb_func_end sub_80D0474
-
- thumb_func_start sub_80D04A8
-sub_80D04A8: @ 80D04A8
- push {lr}
- ldr r0, _080D04E0 @ =sub_80D0160
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _080D04BC
- bl DestroyTask
-_080D04BC:
- ldr r0, _080D04E4 @ =sub_80D025C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _080D04CE
- bl DestroyTask
-_080D04CE:
- movs r0, 0
- movs r1, 0xA0
- movs r2, 0x20
- bl FillPalette
- bl sub_80D04E8
- pop {r0}
- bx r0
- .align 2, 0
-_080D04E0: .4byte sub_80D0160
-_080D04E4: .4byte sub_80D025C
- thumb_func_end sub_80D04A8
-
- thumb_func_start sub_80D04E8
-sub_80D04E8: @ 80D04E8
- push {lr}
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- ldr r0, _080D0544 @ =gBattle_BG1_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080D0548 @ =gBattle_BG1_Y
- strh r1, [r0]
- ldr r0, _080D054C @ =gBattle_BG2_X
- strh r1, [r0]
- movs r0, 0x1
- movs r1, 0x5
- bl sub_8011C44
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x1
- movs r1, 0x7
- bl SetBgAttribute
- movs r0, 0x2
- movs r1, 0x5
- bl sub_8011C44
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x2
- movs r1, 0x7
- bl SetBgAttribute
- movs r1, 0xCA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, _080D0550 @ =gUnknown_2039A24
- ldr r0, [r0]
- bl Free
- pop {r0}
- bx r0
- .align 2, 0
-_080D0544: .4byte gBattle_BG1_X
-_080D0548: .4byte gBattle_BG1_Y
-_080D054C: .4byte gBattle_BG2_X
-_080D0550: .4byte gUnknown_2039A24
- thumb_func_end sub_80D04E8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/fldeff_flash.s b/asm/fldeff_flash.s
index 63067bb03..51e55de63 100644
--- a/asm/fldeff_flash.s
+++ b/asm/fldeff_flash.s
@@ -421,7 +421,7 @@ sub_80C9E4C: @ 80C9E4C
movs r1, 0xE0
movs r2, 0x20
bl LoadPalette
- ldr r0, _080C9EDC @ =gUnknown_83F5854
+ ldr r0, _080C9EDC @ =gUnknown_83F5844 + 0x10
movs r1, 0xE0
movs r2, 0x10
bl LoadPalette
@@ -434,7 +434,7 @@ sub_80C9E4C: @ 80C9E4C
movs r0, 0x54
movs r1, 0
bl SetGpuReg
- ldr r1, _080C9EE4 @ =0x00001f0c
+ ldr r1, _080C9EE4 @ =0x00001f0c =BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(31)
movs r0, 0x8
bl SetGpuReg
movs r1, 0x8A
@@ -461,7 +461,7 @@ _080C9ECC: .4byte 0x0600c000
_080C9ED0: .4byte gUnknown_83F5864
_080C9ED4: .4byte 0x0600f800
_080C9ED8: .4byte gUnknown_83F5804
-_080C9EDC: .4byte gUnknown_83F5854
+_080C9EDC: .4byte gUnknown_83F5844 + 0x10
_080C9EE0: .4byte 0x00003e41
_080C9EE4: .4byte 0x00001f0c
_080C9EE8: .4byte gTasks
@@ -527,7 +527,7 @@ sub_80C9F38: @ 80C9F38
adds r0, r1, 0x1
strh r0, [r4, 0xC]
lsls r1, 1
- ldr r0, _080C9F7C @ =gUnknown_83F5854
+ ldr r0, _080C9F7C @ =gUnknown_83F5844 + 0x10
adds r0, r1, r0
movs r2, 0x10
subs r2, r1
@@ -539,7 +539,7 @@ sub_80C9F38: @ 80C9F38
.align 2, 0
_080C9F74: .4byte 0x00001010
_080C9F78: .4byte gTasks
-_080C9F7C: .4byte gUnknown_83F5854
+_080C9F7C: .4byte gUnknown_83F5844 + 0x10
_080C9F80:
ldr r0, _080C9F98 @ =gUnknown_83F5804
movs r1, 0
diff --git a/asm/party_menu.s b/asm/party_menu.s
index dfe4e02c0..3cb62c712 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -12790,7 +12790,7 @@ sub_8124EFC: @ 8124EFC
muls r5, r0
ldr r0, _08124F8C @ =gPlayerParty
adds r5, r0
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -14661,7 +14661,7 @@ _08125E80: .4byte sub_8125E84
sub_8125E84: @ 8125E84
push {r4,r5,lr}
sub sp, 0xC
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
lsls r0, 24
lsrs r2, r0, 24
ldr r4, _08125ED0 @ =gUnknown_203B0A0
@@ -14735,7 +14735,7 @@ sub_8125F14: @ 8125F14
ands r0, r1
cmp r0, 0
bne _08125F46
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
lsls r0, 24
lsrs r0, 24
cmp r0, 0x4
@@ -14783,7 +14783,7 @@ sub_8125F5C: @ 8125F5C
muls r6, r0
ldr r0, _08125FE8 @ =gPlayerParty
adds r6, r0
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
@@ -14848,7 +14848,7 @@ sub_8125FFC: @ 8125FFC
muls r5, r0
ldr r0, _08126060 @ =gPlayerParty
adds r5, r0
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -14908,14 +14908,14 @@ sub_812607C: @ 812607C
muls r4, r0
ldr r0, _081260D4 @ =gPlayerParty
adds r4, r0
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
adds r0, r4, 0
bl RemoveMonPPBonus
ldrh r5, [r5, 0xE]
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index 0752b5797..d1d6ed06f 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -8406,14 +8406,14 @@ sub_8138B20: @ 8138B20
_08138B28: .4byte gUnknown_203B16C
thumb_func_end sub_8138B20
- thumb_func_start sub_8138B2C
-sub_8138B2C: @ 8138B2C
+ thumb_func_start GetMoveSlotToReplace
+GetMoveSlotToReplace: @ 8138B2C
ldr r0, _08138B34 @ =gUnknown_203B16E
ldrb r0, [r0]
bx lr
.align 2, 0
_08138B34: .4byte gUnknown_203B16E
- thumb_func_end sub_8138B2C
+ thumb_func_end GetMoveSlotToReplace
thumb_func_start sub_8138B38
sub_8138B38: @ 8138B38
diff --git a/baserom.ips b/baserom.ips
index 1150e0779..dbfed775a 100644
--- a/baserom.ips
+++ b/baserom.ips
Binary files differ
diff --git a/common_syms/evolution_scene.txt b/common_syms/evolution_scene.txt
new file mode 100644
index 000000000..137cd3e05
--- /dev/null
+++ b/common_syms/evolution_scene.txt
@@ -0,0 +1 @@
+gCB2_AfterEvolution
diff --git a/data/battle_anim_effects_misc.s b/data/battle_anim_effects_misc.s
index e9e96f2c8..ff14e90a4 100644
--- a/data/battle_anim_effects_misc.s
+++ b/data/battle_anim_effects_misc.s
@@ -9,7 +9,7 @@
gUnknown_83E2964:: @ 83E2964
.byte 0x02, 0x04, 0x01, 0x03
-gUnknown_83E2968::
+gUnknown_83E2968:: @ 83E2968
obj_image_anim_frame 0x0000, 5
obj_image_anim_frame 0x0002, 5
obj_image_anim_frame 0x0004, 5
@@ -20,55 +20,55 @@ gUnknown_83E2968::
obj_image_anim_frame 0x000e, 5
obj_image_anim_jump 0x0000
-gUnknown_83E298C::
+gUnknown_83E298C:: @ 83E298C
.4byte gUnknown_83E2968
-gUnknown_83E2990::
+gUnknown_83E2990:: @ 83E2990
spr_template 10067, 10067, gOamData_83ACA08, gUnknown_83E298C, NULL, gDummySpriteAffineAnimTable, sub_80A22E8
-gUnknown_83E29A8::
+gUnknown_83E29A8:: @ 83E29A8
spr_template 10068, 10068, gOamData_83ACA08, gUnknown_83E298C, NULL, gDummySpriteAffineAnimTable, sub_80A22E8
-gUnknown_83E29C0::
+gUnknown_83E29C0:: @ 83E29C0
spr_template 10065, 10065, gOamData_83ACA08, gUnknown_83E298C, NULL, gDummySpriteAffineAnimTable, sub_80A22E8
-gAnimCmd_83E29D8::
+gAnimCmd_83E29D8:: @ 83E29D8
obj_image_anim_frame 0, 1
obj_image_anim_end
-gAnimCmd_83E29E0::
+gAnimCmd_83E29E0:: @ 83E29E0
obj_image_anim_frame 1, 1
obj_image_anim_end
-gAnimCmd_83E29E8::
+gAnimCmd_83E29E8:: @ 83E29E8
obj_image_anim_frame 2, 1
obj_image_anim_end
-gAnimCmd_83E29F0::
+gAnimCmd_83E29F0:: @ 83E29F0
obj_image_anim_frame 3, 1
obj_image_anim_end
-gAnimCmd_83E29F8::
+gAnimCmd_83E29F8:: @ 83E29F8
obj_image_anim_frame 4, 1
obj_image_anim_end
-gAnimCmd_83E2A00::
+gAnimCmd_83E2A00:: @ 83E2A00
obj_image_anim_frame 5, 1
obj_image_anim_end
-gAnimCmd_83E2A08::
+gAnimCmd_83E2A08:: @ 83E2A08
obj_image_anim_frame 6, 1
obj_image_anim_end
-gAnimCmd_83E2A10::
+gAnimCmd_83E2A10:: @ 83E2A10
obj_image_anim_frame 7, 1
obj_image_anim_end
-gAnimCmd_83E2A18::
+gAnimCmd_83E2A18:: @ 83E2A18
obj_image_anim_frame 8, 1
obj_image_anim_end
-gSpriteAnimTable_83E2A20::
+gSpriteAnimTable_83E2A20:: @ 83E2A20
.4byte gAnimCmd_83E29D8
.4byte gAnimCmd_83E29E0
.4byte gAnimCmd_83E29E8
@@ -77,453 +77,1792 @@ gSpriteAnimTable_83E2A20::
.4byte gAnimCmd_83E2A00
.4byte gAnimCmd_83E2A08
-gSpriteAnimTable_83E2A3C::
+gSpriteAnimTable_83E2A3C:: @ 83E2A3C
.4byte gAnimCmd_83E2A10
-gSpriteAnimTable_83E2A40::
+gSpriteAnimTable_83E2A40:: @ 83E2A40
.4byte gAnimCmd_83E2A18
-gAffineAnimCmd_83E2A44::
+gAffineAnimCmd_83E2A44:: @ 83E2A44
obj_rot_scal_anim_frame -5, -5, 0, 1
obj_rot_scal_anim_jump 0
-gSpriteAffineAnimTable_83E2A54::
+gSpriteAffineAnimTable_83E2A54:: @ 83E2A54
.4byte gAffineAnimCmd_83E2A44
-gUnknown_83E2A58::
+gUnknown_83E2A58:: @ 83E2A58
spr_template 10147, 10147, gOamData_83ACB50, gSpriteAnimTable_83E2A40, NULL, gSpriteAffineAnimTable_83E2A54, sub_80A2388
-gUnknown_83E2A70::
+gUnknown_83E2A70:: @ 83E2A70
spr_template 10147, 10147, gOamData_83AC9C8, gSpriteAnimTable_83E2A20, NULL, gDummySpriteAffineAnimTable, sub_80A23D8
gUnknown_83E2A88:: @ 83E2A88
spr_template 10147, 10147, gOamData_83AC9C8, gSpriteAnimTable_83E2A3C, NULL, gDummySpriteAffineAnimTable, sub_80A2430
-gSpriteTemplate_83E2AA0::
- .incbin "baserom.gba", 0x3E2AA0, 0x1C
+gUnknown_83E2AA0:: @ 83E2AA0
+ obj_rot_scal_anim_frame 320, 320, 0, 0
+ obj_rot_scal_anim_frame -14, -14, 0, 1
+ obj_rot_scal_anim_jump 1
-gUnknown_83E2ABC::
- .incbin "baserom.gba", 0x3E2ABC, 0x2C
+gUnknown_83E2AB8:: @ 83E2AB8
+ .4byte gUnknown_83E2AA0
-gUnknown_83E2AE8::
- .incbin "baserom.gba", 0x3E2AE8, 0x18
+gUnknown_83E2ABC:: @ 83E2ABC
+ spr_template 10235, 10235, gOamData_83ACA88, gDummySpriteAnimTable, NULL, gUnknown_83E2AB8, sub_80A2388
-gUnknown_83E2B00::
- .incbin "baserom.gba", 0x3E2B00, 0x34
+gUnknown_83E2AD4:: @ 83E2AD4
+ obj_rot_scal_anim_frame -5, -5, 0, 1
+ obj_rot_scal_anim_jump 0
+
+gUnknown_83E2AE4:: @ 83E2AE4
+ .4byte gUnknown_83E2AD4
+
+gUnknown_83E2AE8:: @ 83E2AE8
+ spr_template 10147, 10147, gOamData_83ACB50, gSpriteAnimTable_83E2A40, NULL, gUnknown_83E2AE4, sub_80A2580
+
+gUnknown_83E2B00:: @ 83E2B00
+ spr_template 10147, 10147, gOamData_83AC9C8, gSpriteAnimTable_83E2A20, NULL, gDummySpriteAffineAnimTable, sub_80A25EC
+
+gUnknown_83E2B18:: @ 83E2B18
+ obj_image_anim_frame 0, 1
+ obj_image_anim_end
+
+gUnknown_83E2B20:: @ 83E2B20
+ obj_image_anim_frame 4, 7
+ obj_image_anim_frame 8, 7
+ obj_image_anim_jump 0
+
+gUnknown_83E2B2C:: @ 83E2B2C
+ .4byte gUnknown_83E2B18
+ .4byte gUnknown_83E2B20
+
+gUnknown_83E2B34:: @ 83E2B34
+ spr_template 10006, 10006, gOamData_83AC9D0, gUnknown_83E2B2C, NULL, gDummySpriteAffineAnimTable, sub_80A26F0
+
+gUnknown_83E2B4C:: @ 83E2B4C
+ obj_image_anim_frame 0, 1
+ obj_image_anim_end
+
+gUnknown_83E2B54:: @ 83E2B54
+ obj_image_anim_frame 4, 7
+ obj_image_anim_end
+
+gUnknown_83E2B5C:: @ 83E2B5C
+ .4byte gUnknown_83E2B4C
+ .4byte gUnknown_83E2B54
+
+gUnknown_83E2B64:: @ 83E2B64
+ spr_template 10158, 10158, gOamData_83AC9D0, gUnknown_83E2B5C, NULL, gDummySpriteAffineAnimTable, sub_80A27D0
+
+gUnknown_83E2B7C:: @ 83E2B7C
+ obj_image_anim_frame 0, 1
+ obj_image_anim_end
+
+gUnknown_83E2B84:: @ 83E2B84
+ obj_image_anim_frame 4, 1
+ obj_image_anim_end
+
+gUnknown_83E2B8C:: @ 83E2B8C
+ .4byte gUnknown_83E2B7C
+
+gUnknown_83E2B90:: @ 83E2B90
+ .4byte gUnknown_83E2B84
+
+gUnknown_83E2B94:: @ 83E2B94
+ spr_template 10159, 10159, gOamData_83AC9D0, gUnknown_83E2B8C, NULL, gDummySpriteAffineAnimTable, sub_80A2920
+
+gUnknown_83E2BAC:: @ 83E2BAC
+ spr_template 10159, 10159, gOamData_83AC9C8, gUnknown_83E2B90, NULL, gDummySpriteAffineAnimTable, sub_80A29EC
+
+gUnknown_83E2BC4:: @ 83E2BC4
+ obj_image_anim_frame 0, 5
+ obj_image_anim_frame 4, 5
+ obj_image_anim_frame 8, 5
+ obj_image_anim_frame 12, 5
+ obj_image_anim_frame 16, 5
+ obj_image_anim_frame 20, 5
+ obj_image_anim_frame 16, 5
+ obj_image_anim_frame 12, 5
+ obj_image_anim_frame 8, 5
+ obj_image_anim_frame 4, 5
+ obj_image_anim_jump 0
+
+gUnknown_83E2BF0:: @ 83E2BF0
+ obj_image_anim_frame 24, 5
+ obj_image_anim_frame 28, 5
+ obj_image_anim_frame 32, 5
+ obj_image_anim_end
+
+gUnknown_83E2C00:: @ 83E2C00
+ .4byte gUnknown_83E2BC4
+ .4byte gUnknown_83E2BF0
+
+gUnknown_83E2C08:: @ 83E2C08
+ spr_template 10063, 10063, gOamData_83AC9D0, gUnknown_83E2C00, NULL, gDummySpriteAffineAnimTable, sub_80A2AA4
+
+gUnknown_83E2C20:: @ 83E2C20
+ spr_template 10063, 10063, gOamData_83AC9D0, gUnknown_83E2C00, NULL, gDummySpriteAffineAnimTable, AnimMoveTwisterParticle
+
+gUnknown_83E2C38:: @ 83E2C38
+ obj_image_anim_frame 0, 3
+ obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_jump 0
+
+gUnknown_83E2C4C:: @ 83E2C4C
+ .4byte gUnknown_83E2C38
+
+gUnknown_83E2C50:: @ 83E2C50
+ spr_template 10160, 10160, gOamData_83AC9F8, gUnknown_83E2C4C, NULL, gDummySpriteAffineAnimTable, sub_80A2B9C
+
+gUnknown_83E2C68:: @ 83E2C68
+ obj_rot_scal_anim_frame 0, 0, 0, 1
+ obj_rot_scal_anim_jump 0
+
+gUnknown_83E2C78:: @ 83E2C78
+ .4byte gUnknown_83E2C68
+
+gUnknown_83E2C7C:: @ 83E2C7C
+ spr_template 10174, 10174, gOamData_83ACA38, gDummySpriteAnimTable, NULL, gUnknown_83E2C78, sub_80A2B9C
+
+gUnknown_83E2C94:: @ 83E2C94
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 32, 4
+ obj_image_anim_frame 64, 4
+ obj_image_anim_frame 96, 4
+ obj_image_anim_end
+
+gUnknown_83E2CA8:: @ 83E2CA8
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 64, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 96, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
-gUnknown_83E2B34::
- .incbin "baserom.gba", 0x3E2B34, 0x30
+gUnknown_83E2CBC:: @ 83E2CBC
+ .4byte gUnknown_83E2C94
+ .4byte gUnknown_83E2CA8
-gUnknown_83E2B64::
- .incbin "baserom.gba", 0x3E2B64, 0x30
+gUnknown_83E2CC4:: @ 83E2CC4
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_frame -11, 0, 0, 6
+ obj_rot_scal_anim_frame 11, 0, 0, 6
+ obj_rot_scal_anim_end
-gUnknown_83E2B94::
- .incbin "baserom.gba", 0x3E2B94, 0x18
+gUnknown_83E2CE4:: @ 83E2CE4
+ obj_rot_scal_anim_frame -256, 256, 0, 0
+ obj_rot_scal_anim_frame 11, 0, 0, 6
+ obj_rot_scal_anim_frame -11, 0, 0, 6
+ obj_rot_scal_anim_end
-gUnknown_83E2BAC::
- .incbin "baserom.gba", 0x3E2BAC, 0x5C
+gUnknown_83E2D04:: @ 83E2D04
+ .4byte gUnknown_83E2CC4
+ .4byte gUnknown_83E2CE4
-gUnknown_83E2C08::
- .incbin "baserom.gba", 0x3E2C08, 0x18
+gUnknown_83E2D0C:: @ 83E2D0C
+ spr_template 10186, 10186, gOamData_83ACA60, gUnknown_83E2CBC, NULL, gUnknown_83E2D04, sub_80A2E28
-gUnknown_83E2C20::
- .incbin "baserom.gba", 0x3E2C20, 0x30
+gUnknown_83E2D24:: @ 83E2D24
+ obj_rot_scal_anim_frame 0, 0, 0, 0
+ obj_rot_scal_anim_frame 48, 48, 0, 14
+ obj_rot_scal_anim_end
-gUnknown_83E2C50::
- .incbin "baserom.gba", 0x3E2C50, 0x2C
+gUnknown_83E2D3C:: @ 83E2D3C
+ obj_rot_scal_anim_frame -16, -16, 0, 1
+ obj_rot_scal_anim_jump 0
+
+gUnknown_83E2D4C:: @ 83E2D4C
+ .4byte gUnknown_83E2D24
+ .4byte gUnknown_83E2D3C
+
+gUnknown_83E2D54:: @ 83E2D54
+ spr_template 10147, 10147, gOamData_83ACA90, gSpriteAnimTable_83E2A40, NULL, gUnknown_83E2D4C, sub_80A3098
+
+gUnknown_83E2D6C:: @ 83E2D6C
+ obj_image_anim_frame 0, 7
+ obj_image_anim_frame 16, 7
+ obj_image_anim_frame 32, 7
+ obj_image_anim_frame 48, 7
+ obj_image_anim_end
+
+gUnknown_83E2D80:: @ 83E2D80
+ obj_image_anim_frame 0, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 48, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E2D94:: @ 83E2D94
+ obj_image_anim_frame 0, 7
+ obj_image_anim_frame 16, 7
+ obj_image_anim_frame 32, 7
+ obj_image_anim_end
+
+gUnknown_83E2DA4:: @ 83E2DA4
+ obj_image_anim_frame 0, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 7, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E2DB4:: @ 83E2DB4
+ .4byte gUnknown_83E2D6C
+ .4byte gUnknown_83E2D80
+ .4byte gUnknown_83E2D94
+ .4byte gUnknown_83E2DA4
+
+gUnknown_83E2DC4:: @ 83E2DC4
+ spr_template 10223, 10223, gOamData_83AC9D8, gUnknown_83E2DB4, NULL, gDummySpriteAffineAnimTable, sub_80A3168
+
+gUnknown_83E2DDC:: @ 83E2DDC
+ spr_template 10223, 10223, gOamData_83AC9D8, gUnknown_83E2DB4, NULL, gDummySpriteAffineAnimTable, sub_80A31EC
+
+gUnknown_83E2DF4:: @ 83E2DF4
+ obj_image_anim_frame 3, 3
+ obj_image_anim_frame 0, 5
+ obj_image_anim_jump 0
-gUnknown_83E2C7C::
- .incbin "baserom.gba", 0x3E2C7C, 0x90
+gUnknown_83E2E00:: @ 83E2E00
+ .4byte gUnknown_83E2DF4
-gUnknown_83E2D0C::
- .incbin "baserom.gba", 0x3E2D0C, 0x48
+gUnknown_83E2E04:: @ 83E2E04
+ spr_template 10147, 10147, gOamData_83AC9C8, gUnknown_83E2E00, NULL, gDummySpriteAffineAnimTable, sub_80A3334
-gUnknown_83E2D54::
- .incbin "baserom.gba", 0x3E2D54, 0x70
+gUnknown_83E2E1C:: @ 83E2E1C
+ obj_image_anim_frame 0, 30
+ obj_image_anim_end
-gUnknown_83E2DC4::
- .incbin "baserom.gba", 0x3E2DC4, 0x18
+gUnknown_83E2E24:: @ 83E2E24
+ .4byte gUnknown_83E2E1C
+
+gUnknown_83E2E28:: @ 83E2E28
+ obj_rot_scal_anim_frame 0, 0, 252, 10
+ obj_rot_scal_anim_frame 0, 0, 4, 20
+ obj_rot_scal_anim_frame 0, 0, 252, 10
+ obj_rot_scal_anim_end
+
+gUnknown_83E2E48:: @ 83E2E48
+ obj_rot_scal_anim_frame 0, 0, 255, 2
+ obj_rot_scal_anim_frame 0, 0, 1, 4
+ obj_rot_scal_anim_frame 0, 0, 255, 4
+ obj_rot_scal_anim_frame 0, 0, 1, 4
+ obj_rot_scal_anim_frame 0, 0, 255, 4
+ obj_rot_scal_anim_frame 0, 0, 1, 2
+ obj_rot_scal_anim_end
+
+gUnknown_83E2E80:: @ 83E2E80
+ .4byte gUnknown_83E2E28
+ .4byte gUnknown_83E2E48
+
+gUnknown_83E2E88:: @ 83E2E88
+ spr_template 10224, 10224, gOamData_83ACA38, gUnknown_83E2E24, NULL, gUnknown_83E2E80, sub_80A3518
+
+gUnknown_83E2EA0:: @ 83E2EA0
+ spr_template 10224, 10224, gOamData_83ACA38, gUnknown_83E2E24, NULL, gUnknown_83E2E80, sub_80A35F4
+
+gUnknown_83E2EB8:: @ 83E2EB8
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 4, 4
+ obj_image_anim_frame 8, 4
+ obj_image_anim_frame 12, 4
+ obj_image_anim_end
-gUnknown_83E2DDC::
- .incbin "baserom.gba", 0x3E2DDC, 0x28
+gUnknown_83E2ECC:: @ 83E2ECC
+ .4byte gUnknown_83E2EB8
-gUnknown_83E2E04::
- .incbin "baserom.gba", 0x3E2E04, 0x84
+gUnknown_83E2ED0:: @ 83E2ED0
+ spr_template 10195, 10195, gOamData_83AC9D0, gUnknown_83E2ECC, NULL, gDummySpriteAffineAnimTable, sub_80A3670
-gUnknown_83E2E88::
- .incbin "baserom.gba", 0x3E2E88, 0x18
+gUnknown_83E2EE8:: @ 83E2EE8
+ spr_template 10224, 10224, gOamData_83ACA38, gUnknown_83E2E24, NULL, gUnknown_83E2E80, sub_80A36B4
-gUnknown_83E2EA0::
- .incbin "baserom.gba", 0x3E2EA0, 0x30
+gUnknown_83E2F00:: @ 83E2F00
+ obj_rot_scal_anim_frame 0, 0, 0, 3
+ obj_rot_scal_anim_end
-gUnknown_83E2ED0::
- .incbin "baserom.gba", 0x3E2ED0, 0x18
+gUnknown_83E2F10:: @ 83E2F10
+ obj_rot_scal_anim_frame 0, -10, 0, 3
+ obj_rot_scal_anim_frame 0, -6, 0, 3
+ obj_rot_scal_anim_frame 0, -2, 0, 3
+ obj_rot_scal_anim_frame 0, 0, 0, 3
+ obj_rot_scal_anim_frame 0, 2, 0, 3
+ obj_rot_scal_anim_frame 0, 6, 0, 3
+ obj_rot_scal_anim_frame 0, 10, 0, 3
+ obj_rot_scal_anim_end
-gUnknown_83E2EE8::
- .incbin "baserom.gba", 0x3E2EE8, 0x78
+gUnknown_83E2F50:: @ 83E2F50
+ .4byte gUnknown_83E2F00
+ .4byte gUnknown_83E2F10
+ .4byte gUnknown_83E2E28
+ .4byte gUnknown_83E2E48
-gUnknown_83E2F60::
- .incbin "baserom.gba", 0x3E2F60, 0x18
+gUnknown_83E2F60:: @ 83E2F60
+ spr_template 10224, 10224, gOamData_83ACA38, gUnknown_83E2E24, NULL, gUnknown_83E2F50, sub_80A37BC
gUnknown_83E2F78:: @ 83E2F78
- .incbin "baserom.gba", 0x3E2F78, 0x78
+ .byte 0x05, 0x18, 0x01, 0x00, 0x04, 0x00, 0x08, 0x10, 0xff, 0x00, 0x02, 0x00, 0x08, 0x10, 0x01, 0x00, 0x02, 0x00, 0x08, 0x10, 0x01, 0x00, 0x02, 0x00, 0x08, 0x10, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00
+ .byte 0x7f, 0x00, 0x00, 0x00
+
+gUnknown_83E2F9C:: @ 83E2F9C
+ obj_image_anim_frame 28, 1
+ obj_image_anim_end
+
+gUnknown_83E2FA4:: @ 83E2FA4
+ obj_image_anim_frame 32, 1
+ obj_image_anim_end
+
+gUnknown_83E2FAC:: @ 83E2FAC
+ obj_image_anim_frame 20, 1
+ obj_image_anim_end
+
+gUnknown_83E2FB4:: @ 83E2FB4
+ obj_image_anim_frame 28, 1, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E2FBC:: @ 83E2FBC
+ obj_image_anim_frame 16, 1
+ obj_image_anim_end
+
+gUnknown_83E2FC4:: @ 83E2FC4
+ obj_image_anim_frame 16, 1, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E2FCC:: @ 83E2FCC
+ obj_image_anim_frame 28, 1
+ obj_image_anim_end
+
+gUnknown_83E2FD4:: @ 83E2FD4
+ .4byte gUnknown_83E2F9C
+ .4byte gUnknown_83E2FA4
+ .4byte gUnknown_83E2FAC
+ .4byte gUnknown_83E2FB4
+ .4byte gUnknown_83E2FBC
+ .4byte gUnknown_83E2FC4
+ .4byte gUnknown_83E2FCC
gUnknown_83E2FF0:: @ 83E2FF0
- .incbin "baserom.gba", 0x3E2FF0, 0x34
+ spr_template 10063, 10063, gOamData_83AC9D0, gUnknown_83E2FD4, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+
+gUnknown_83E3008:: @ 83E3008
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_frame 0, 0, 4, 1
+ obj_rot_scal_anim_jump 1
+
+gUnknown_83E3020:: @ 83E3020
+ .4byte gUnknown_83E3008
+
+gUnknown_83E3024:: @ 83E3024
+ spr_template 10159, 10159, gOamData_83AC9C8, gUnknown_83E2B90, NULL, gDummySpriteAffineAnimTable, sub_80A4040
+
+gUnknown_83E303C:: @ 83E303C
+ spr_template 10159, 10159, gOamData_83ACA30, gUnknown_83E2B8C, NULL, gUnknown_83E3020, sub_80A4040
+
+gUnknown_83E3054:: @ 83E3054
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_frame 0, 0, 246, 1
+ obj_rot_scal_anim_jump 1
+
+gUnknown_83E306C:: @ 83E306C
+ obj_rot_scal_anim_frame 192, 192, 0, 0
+ obj_rot_scal_anim_frame 0, 0, 244, 1
+ obj_rot_scal_anim_jump 1
+
+gUnknown_83E3084:: @ 83E3084
+ obj_rot_scal_anim_frame 143, 143, 0, 0
+ obj_rot_scal_anim_frame 0, 0, 241, 1
+ obj_rot_scal_anim_jump 1
+
+gUnknown_83E309C:: @ 83E309C
+ .4byte gUnknown_83E3054
-gUnknown_83E3024::
- .incbin "baserom.gba", 0x3E3024, 0x18
+gUnknown_83E30A0:: @ 83E30A0
+ .4byte gUnknown_83E306C
-gUnknown_83E303C::
- .incbin "baserom.gba", 0x3E303C, 0x6C
+gUnknown_83E30A4:: @ 83E30A4
+ .4byte gUnknown_83E3084
-gUnknown_83E30A8::
- .incbin "baserom.gba", 0x3E30A8, 0x18
+gUnknown_83E30A8:: @ 83E30A8
+ spr_template 10271, 10271, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gUnknown_83E309C, sub_80A4040
-gUnknown_83E30C0::
- .incbin "baserom.gba", 0x3E30C0, 0x18
+gUnknown_83E30C0:: @ 83E30C0
+ spr_template 10271, 10271, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gUnknown_83E30A0, sub_80A4040
-gUnknown_83E30D8::
- .incbin "baserom.gba", 0x3E30D8, 0x18
+gUnknown_83E30D8:: @ 83E30D8
+ spr_template 10271, 10271, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gUnknown_83E30A4, sub_80A4040
gUnknown_83E30F0:: @ 83E30F0
- .incbin "baserom.gba", 0x3E30F0, 0x10
+ .2byte 0x001f, 0x027f, 0x03ff, 0x03e0, 0x7dc5, 0x7d56, 0x7eb6, 0x0000
-gUnknown_83E3100::
- .incbin "baserom.gba", 0x3E3100, 0x48
+gUnknown_83E3100:: @ 83E3100
+ spr_template 10266, 10266, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A4298
-gUnknown_83E3148::
- .incbin "baserom.gba", 0x3E3148, 0x18
+gUnknown_83E3118:: @ 83E3118
+ obj_image_anim_frame 64, 3
+ obj_image_anim_frame 80, 3
+ obj_image_anim_frame 96, 3
+ obj_image_anim_frame 112, 6
+ obj_image_anim_end
+
+gUnknown_83E312C:: @ 83E312C
+ obj_image_anim_frame 64, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 80, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 96, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 112, 6, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E3140:: @ 83E3140
+ .4byte gUnknown_83E3118
+ .4byte gUnknown_83E312C
+
+gUnknown_83E3148:: @ 83E3148
+ spr_template 10056, 10056, gOamData_83AC9D8, gUnknown_83E3140, NULL, gDummySpriteAffineAnimTable, sub_80A4450
+
+gUnknown_83E3160:: @ 83E3160
+ spr_template 10287, 10287, gOamData_83AC9D8, gUnknown_83E3140, NULL, gDummySpriteAffineAnimTable, sub_80A4450
+
+gUnknown_83E3178:: @ 83E3178
+ obj_image_anim_frame 0x0000, 4
+ obj_image_anim_frame 0x0010, 4
+ obj_image_anim_frame 0x0020, 4
+ obj_image_anim_frame 0x0030, 4
+ obj_image_anim_frame 0x0040, 5
+ obj_image_anim_end
+
+gUnknown_83E3190:: @ 83E3190
+ .4byte gUnknown_83E3178
+
+gUnknown_83E3194:: @ 83E3194
+ spr_template 10021, 10021, gOamData_83AC9D8, gUnknown_83E3190, NULL, gDummySpriteAffineAnimTable, sub_80A43F8
+
+gUnknown_83E31AC:: @ 83E31AC
+ spr_template 10022, 10022, gOamData_83AC9D8, gUnknown_83E3190, NULL, gDummySpriteAffineAnimTable, sub_80A43F8
+
+gUnknown_83E31C4:: @ 83E31C4
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E31D4::
+ obj_rot_scal_anim_frame 256, 256, 32, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E31E4::
+ obj_rot_scal_anim_frame 256, 256, 64, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E31F4::
+ obj_rot_scal_anim_frame 256, 256, 96, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E3204::
+ obj_rot_scal_anim_frame 256, 256, 128, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E3214::
+ obj_rot_scal_anim_frame 256, 256, 160, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E3224::
+ obj_rot_scal_anim_frame 256, 256, 192, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E3234::
+ obj_rot_scal_anim_frame 256, 256, 224, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E3244::
+ .4byte gUnknown_83E31C4
+ .4byte gUnknown_83E31D4
+ .4byte gUnknown_83E31E4
+ .4byte gUnknown_83E31F4
+ .4byte gUnknown_83E3204
+ .4byte gUnknown_83E3214
+ .4byte gUnknown_83E3224
+ .4byte gUnknown_83E3234
+
+gUnknown_83E3264::
+ spr_template 10143, 10143, gOamData_83ACA38, gDummySpriteAnimTable, NULL, gUnknown_83E3244, sub_80A4494
+
+gUnknown_83E327C:: @ 83E327C
+ obj_image_anim_frame 0, 5
+ obj_image_anim_frame 16, 5
+ obj_image_anim_frame 32, 5
+ obj_image_anim_frame 48, 5
+ obj_image_anim_end
+
+gUnknown_83E3290:: @ 83E3290
+ .4byte gUnknown_83E327C
+
+gUnknown_83E3294:: @ 83E3294
+ spr_template 10138, 10138, gOamData_83ACAF8, gUnknown_83E3290, NULL, gDummySpriteAffineAnimTable, sub_80A44E0
+
+gUnknown_83E32AC:: @ 83E32AC
+ spr_template 10138, 10138, gOamData_83ACAF8, gUnknown_83E3290, NULL, gDummySpriteAffineAnimTable, sub_80A4588
+
+gUnknown_83E32C4:: @ 83E32C4
+ obj_image_anim_frame 0x0000, 1
+ obj_image_anim_end
+
+gUnknown_83E32CC::
+ obj_image_anim_frame 0x0004, 1
+ obj_image_anim_end
+
+gUnknown_83E32D4::
+ obj_image_anim_frame 0x0008, 1
+ obj_image_anim_end
+
+gUnknown_83E32DC::
+ obj_image_anim_frame 0x000c, 1
+ obj_image_anim_end
+
+gUnknown_83E32E4::
+ obj_image_anim_frame 0x0010, 1
+ obj_image_anim_end
+
+gUnknown_83E32EC::
+ obj_image_anim_frame 0x0014, 1
+ obj_image_anim_end
+
+gUnknown_83E32F4::
+ obj_image_anim_frame 0x0000, 1, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+
+gUnknown_83E32FC::
+ obj_image_anim_frame 0x0004, 1, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+
+gUnknown_83E3304::
+ obj_image_anim_frame 0x0008, 1, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+
+gUnknown_83E330C::
+ obj_image_anim_frame 0x000c, 1, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+
+gUnknown_83E3314::
+ .4byte gUnknown_83E32C4
+ .4byte gUnknown_83E32CC
+ .4byte gUnknown_83E32D4
+ .4byte gUnknown_83E32DC
+ .4byte gUnknown_83E32E4
+ .4byte gUnknown_83E32EC
+ .4byte gUnknown_83E32F4
+ .4byte gUnknown_83E32FC
+ .4byte gUnknown_83E3304
+ .4byte gUnknown_83E330C
+
+gUnknown_83E333C::
+ spr_template 10072, 10072, gOamData_83AC9D0, gUnknown_83E3314, NULL, gDummySpriteAffineAnimTable, sub_80A481C
+
+gUnknown_83E3354:: @ 83E3354
+ spr_template 10280, 10280, gOamData_83ACB00, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A48F0
+
+gUnknown_83E336C:: @ 83E336C
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E337C:: @ 83E337C
+ obj_rot_scal_anim_frame 0, 0, 2, 12
+ obj_rot_scal_anim_frame 0, 0, 0, 6
+ obj_rot_scal_anim_frame 0, 0, 254, 24
+ obj_rot_scal_anim_frame 0, 0, 0, 6
+ obj_rot_scal_anim_frame 0, 0, 2, 12
+ obj_rot_scal_anim_jump 0
+
+gUnknown_83E33AC:: @ 83E33AC
+ .4byte gUnknown_83E336C
+ .4byte gUnknown_83E337C
+
+gUnknown_83E33B4:: @ 83E33B4
+ spr_template 10099, 10099, gOamData_83ACB58, gDummySpriteAnimTable, NULL, gUnknown_83E33AC, sub_80A4ACC
+
+gUnknown_83E33CC:: @ 83E33CC
+ obj_image_anim_frame 0, 7
+ obj_image_anim_frame 16, 7
+ obj_image_anim_frame 32, 7
+ obj_image_anim_frame 48, 7
+ obj_image_anim_frame 64, 7
+ obj_image_anim_frame 80, 7
+ obj_image_anim_frame 96, 7
+ obj_image_anim_frame 112, 7
+ obj_image_anim_jump 0
+
+gUnknown_83E33F0:: @ 83E33F0
+ .4byte gUnknown_83E33CC
+
+gUnknown_83E33F4:: @ 83E33F4
+ spr_template 10049, 10049, gOamData_83AC9D8, gUnknown_83E33F0, NULL, gDummySpriteAffineAnimTable, sub_80A4D0C
+
+gUnknown_83E340C:: @ 83E340C
+ spr_template 10049, 10049, gOamData_83AC9D8, gUnknown_83E33F0, NULL, gDummySpriteAffineAnimTable, sub_80A4D5C
+
+gUnknown_83E3424:: @ 83E3424
+ obj_image_anim_frame 0x0000, 10
+ obj_image_anim_frame 0x0004, 10
+ obj_image_anim_frame 0x0008, 10
+ obj_image_anim_frame 0x000c, 10
+ obj_image_anim_frame 0x0010, 26
+ obj_image_anim_frame 0x0010, 5
+ obj_image_anim_frame 0x0014, 5
+ obj_image_anim_frame 0x0018, 15
+ obj_image_anim_end
+
+gUnknown_83E3448::
+ obj_image_anim_frame 0x0000, 10, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0004, 10, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0008, 10, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x000c, 10, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0010, 26, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0010, 5, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0014, 5, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0018, 15, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E346C::
+ .4byte gUnknown_83E3424
+ .4byte gUnknown_83E3448
-gUnknown_83E3160::
- .incbin "baserom.gba", 0x3E3160, 0x134
+gUnknown_83E3474::
+ spr_template 10032, 10032, gOamData_83AC9D0, gUnknown_83E346C, NULL, gDummySpriteAffineAnimTable, sub_80A4E40
-gUnknown_83E3294::
- .incbin "baserom.gba", 0x3E3294, 0x18
+gUnknown_83E348C:: @ 83E348C
+ obj_image_anim_frame 0, 40
+ obj_image_anim_end
+
+gUnknown_83E3494:: @ 83E3494
+ .4byte gUnknown_83E348C
-gUnknown_83E32AC::
- .incbin "baserom.gba", 0x3E32AC, 0xA8
+gUnknown_83E3498:: @ 83E3498
+ obj_rot_scal_anim_frame 20, 20, 226, 0
+ obj_rot_scal_anim_frame 8, 8, 1, 24
+ obj_rot_scal_anim_end
-gUnknown_83E3354::
- .incbin "baserom.gba", 0x3E3354, 0x60
+gUnknown_83E34B0:: @ 83E34B0
+ obj_rot_scal_anim_loop 0
+ obj_rot_scal_anim_frame 0, 0, 1, 24
+ obj_rot_scal_anim_loop 10
-gUnknown_83E33B4::
- .incbin "baserom.gba", 0x3E33B4, 0x40
+gUnknown_83E34C8:: @ 83E34C8
+ obj_rot_scal_anim_frame 20, 20, 30, 0
+ obj_rot_scal_anim_frame 8, 8, 255, 24
+ obj_rot_scal_anim_end
-gUnknown_83E33F4::
- .incbin "baserom.gba", 0x3E33F4, 0x18
+gUnknown_83E34E0:: @ 83E34E0
+ obj_rot_scal_anim_loop 0
+ obj_rot_scal_anim_frame 0, 0, 255, 24
+ obj_rot_scal_anim_loop 10
-gUnknown_83E340C::
- .incbin "baserom.gba", 0x3E340C, 0xF4
+gUnknown_83E34F8:: @ 83E34F8
+ .4byte gUnknown_83E3498
+ .4byte gUnknown_83E34C8
-gUnknown_83E3500::
- .incbin "baserom.gba", 0x3E3500, 0x18
+gUnknown_83E3500:: @ 83E3500
+ spr_template 10228, 10228, gOamData_83ACA38, gUnknown_83E3494, NULL, gUnknown_83E34F8, sub_80A4EF4
-gUnknown_83E3518::
- .incbin "baserom.gba", 0x3E3518, 0x18
+gUnknown_83E3518:: @ 83E3518
+ spr_template 10014, 10014, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A4FAC
-gUnknown_83E3530::
- .incbin "baserom.gba", 0x3E3530, 0x18
+gUnknown_83E3530:: @ 83E3530
+ spr_template 10014, 10014, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A5298
gUnknown_83E3548:: @ 83E3548
- .incbin "baserom.gba", 0x3E3548, 0x8
+ .byte 0x40, 0x40, 0x00, 0xc0, 0xc0, 0x40, 0x20, 0xe0
+
+gUnknown_83E3550:: @ 83E3550
+ spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A5340
+ spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A5590
+
+gUnknown_83E3580:: @ 83E3580
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 16, 4
+ obj_image_anim_frame 32, 4
+ obj_image_anim_frame 48, 4
+ obj_image_anim_end
+
+gUnknown_83E3594:: @ 83E3594
+ obj_image_anim_frame 48, 4
+ obj_image_anim_end
+
+gUnknown_83E359C:: @ 83E359C
+ .4byte gUnknown_83E3580
+ .4byte gUnknown_83E3594
+
+gUnknown_83E35A4:: @ 83E35A4
+ spr_template 10183, 10183, gOamData_83AC9D8, gUnknown_83E359C, NULL, gDummySpriteAffineAnimTable, sub_80A5940
+
+gUnknown_83E35BC:: @ 83E35BC
+ spr_template 10286, 10286, gOamData_83AC9D8, gUnknown_83E359C, NULL, gDummySpriteAffineAnimTable, sub_80A59A8
+
+gUnknown_83E35D4:: @ 83E35D4
+ spr_template 10286, 10286, gOamData_83AC9D8, gUnknown_83E359C, NULL, gDummySpriteAffineAnimTable, sub_80A59F0
+
+gUnknown_83E35EC:: @ 83E35EC
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 8, 12
+ obj_image_anim_frame 16, 4
+ obj_image_anim_frame 24, 4
+ obj_image_anim_end
+
+gUnknown_83E3600:: @ 83E3600
+ .4byte gUnknown_83E35EC
+
+gUnknown_83E3604:: @ 83E3604
+ spr_template 10184, 10184, gOamData_83ACA18, gUnknown_83E3600, NULL, gDummySpriteAffineAnimTable, sub_80A5AD8
+
+gUnknown_83E361C:: @ 83E361C
+ obj_image_anim_frame 0, 18
+ obj_image_anim_frame 0, 6
+ obj_image_anim_frame 16, 18
+ obj_image_anim_frame 0, 6
+ obj_image_anim_frame 16, 6
+ obj_image_anim_frame 32, 18
+ obj_image_anim_frame 16, 6
+ obj_image_anim_frame 32, 6
+ obj_image_anim_frame 48, 18
+ obj_image_anim_frame 32, 6
+ obj_image_anim_frame 48, 6
+ obj_image_anim_frame 64, 18
+ obj_image_anim_frame 48, 6
+ obj_image_anim_frame 64, 54
+ obj_image_anim_end
+
+gUnknown_83E3658:: @ 83E3658
+ .4byte gUnknown_83E361C
+
+gUnknown_83E365C:: @ 83E365C
+ spr_template 10185, 10185, gOamData_83AC9D8, gUnknown_83E3658, NULL, gDummySpriteAffineAnimTable, sub_80A5B7C
+
+gUnknown_83E3674:: @ 83E3674
+ spr_template 10017, 10017, gOamData_83AC9C8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, TranslateAnimSpriteToTargetMonLocation
+
+gUnknown_83E368C:: @ 83E368C
+ obj_image_anim_frame 0, 3
+ obj_image_anim_frame 16, 3
+ obj_image_anim_frame 32, 3
+ obj_image_anim_frame 48, 3
+ obj_image_anim_frame 64, 3
+ obj_image_anim_end
-gUnknown_83E3550::
- .incbin "baserom.gba", 0x3E3550, 0x54
+gUnknown_83E36A4:: @ 83E36A4
+ .4byte gUnknown_83E368C
-gUnknown_83E35A4::
- .incbin "baserom.gba", 0x3E35A4, 0x18
+gUnknown_83E36A8:: @ 83E36A8
+ spr_template 10030, 10030, gOamData_83AC9D8, gUnknown_83E36A4, NULL, gDummySpriteAffineAnimTable, AnimSpriteOnMonPos
-gUnknown_83E35BC::
- .incbin "baserom.gba", 0x3E35BC, 0x18
+gUnknown_83E36C0:: @ 83E36C0
+ obj_image_anim_frame 3, 5
+ obj_image_anim_frame 2, 5
+ obj_image_anim_frame 1, 5
+ obj_image_anim_frame 0, 5
+ obj_image_anim_end
-gUnknown_83E35D4::
- .incbin "baserom.gba", 0x3E35D4, 0x30
+gUnknown_83E36D4:: @ 83E36D4
+ .4byte gUnknown_83E36C0
-gUnknown_83E3604::
- .incbin "baserom.gba", 0x3E3604, 0x58
+gUnknown_83E36D8:: @ 83E36D8
+ obj_rot_scal_anim_frame 512, 512, 0, 0
+ obj_rot_scal_anim_end
-gUnknown_83E365C::
- .incbin "baserom.gba", 0x3E365C, 0x18
+gUnknown_83E36E8:: @ 83E36E8
+ .4byte gUnknown_83E36D8
-gUnknown_83E3674::
- .incbin "baserom.gba", 0x3E3674, 0x34
+gUnknown_83E36EC:: @ 83E36EC
+ spr_template 10018, 10018, gOamData_83ACBA8, gUnknown_83E36D4, NULL, gUnknown_83E36E8, sub_80A5C68
-gUnknown_83E36A8::
- .incbin "baserom.gba", 0x3E36A8, 0x44
+gUnknown_83E3704:: @ 83E3704
+ obj_image_anim_frame 0, 5
+ obj_image_anim_frame 1, 5
+ obj_image_anim_frame 2, 5
+ obj_image_anim_frame 3, 5
+ obj_image_anim_end
-gUnknown_83E36EC::
- .incbin "baserom.gba", 0x3E36EC, 0x30
+gUnknown_83E3718:: @ 83E3718
+ .4byte gUnknown_83E3704
-gUnknown_83E371C::
- .incbin "baserom.gba", 0x3E371C, 0x18
+gUnknown_83E371C:: @ 83E371C
+ spr_template 10018, 10018, gOamData_83ACBA8, gUnknown_83E3718, NULL, gUnknown_83E36E8, sub_80A5D4C
gUnknown_83E3734:: @ 83E3734
- .incbin "baserom.gba", 0x3E3734, 0x30
+ spr_template 10194, 10194, gOamData_83ACB00, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A5EE0
+
+gUnknown_83E374C:: @ 83E374C
+ obj_image_anim_frame 0, 8
+ obj_image_anim_frame 4, 8
+ obj_image_anim_frame 8, 8
+ obj_image_anim_frame 12, 8
+ obj_image_anim_jump 0
+
+gUnknown_83E3760:: @ 83E3760
+ .4byte gUnknown_83E374C
gUnknown_83E3764:: @ 83E3764
- .incbin "baserom.gba", 0x3E3764, 0x40
+ spr_template 10195, 10195, gOamData_83AC9D0, gUnknown_83E3760, NULL, gDummySpriteAffineAnimTable, sub_80A5F40
+
+gUnknown_83E377C:: @ 83E377C
+ obj_image_anim_frame 0, 2
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 32, 2
+ obj_image_anim_frame 48, 3
+ obj_image_anim_frame 64, 5
+ obj_image_anim_frame 80, 3
+ obj_image_anim_frame 96, 2
+ obj_image_anim_frame 0, 2
+ obj_image_anim_end
+
+gUnknown_83E37A0:: @ 83E37A0
+ .4byte gUnknown_83E377C
+
+gUnknown_83E37A4:: @ 83E37A4
+ spr_template 10031, 10031, gOamData_83AC9D8, gUnknown_83E37A0, NULL, gDummySpriteAffineAnimTable, AnimSpriteOnMonPos
+
+gUnknown_83E37BC:: @ 83E37BC
+ spr_template 10020, 10020, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A6244
+
+gUnknown_83E37D4:: @ 83E37D4
+ obj_image_anim_frame 0, 2
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 32, 2
+ obj_image_anim_frame 48, 2
+ obj_image_anim_end
+
+gUnknown_83E37E8:: @ 83E37E8
+ .4byte gUnknown_83E37D4
+
+gUnknown_83E37EC:: @ 83E37EC
+ spr_template 10192, 10192, gOamData_83AC9D8, gUnknown_83E37E8, NULL, gDummySpriteAffineAnimTable, sub_80A65CC
+
+gUnknown_83E3804:: @ 83E3804
+ obj_image_anim_frame 0x0000, 10
+ obj_image_anim_end
+
+gOamData_83E380C::
+ obj_image_anim_frame 0x0004, 10
+ obj_image_anim_end
+
+gUnknown_83E3814:: @ 83E3814
+ obj_image_anim_frame 0x0008, 41
+ obj_image_anim_end
+
+gUnknown_83E381C:: @ 83E381C
+ obj_image_anim_frame 0x000c, 10
+ obj_image_anim_end
-gUnknown_83E37A4::
- .incbin "baserom.gba", 0x3E37A4, 0x18
+gUnknown_83E3824:: @ 83E3824
+ obj_image_anim_frame 0x0010, 10
+ obj_image_anim_end
+
+gUnknown_83E382C:: @ 83E382C
+ obj_image_anim_frame 0x0014, 10
+ obj_image_anim_end
+ obj_image_anim_frame 0x0000, 10, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+ obj_image_anim_frame 0x0004, 10, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
-gUnknown_83E37BC::
- .incbin "baserom.gba", 0x3E37BC, 0x30
+gUnknown_83E3844:: @ 83E3844
+ spr_template 14340, 2110, gOamData_83E380C, gUnknown_83E3814, gUnknown_83E381C, gUnknown_83E3824, gUnknown_83E382C
-gUnknown_83E37EC::
- .incbin "baserom.gba", 0x3E37EC, 0x94
+gUnknown_83E385C:: @ 83E385C
+ .4byte 0x83e3834
+ .4byte 0x83e383c
-gUnknown_83E3880::
- .incbin "baserom.gba", 0x3E3880, 0x18
+gUnknown_83E3864:: @ 83E3864
+ obj_rot_scal_anim_frame 12, 12, 0, 16
+ obj_rot_scal_anim_frame -12, -12, 0, 16
+ obj_rot_scal_anim_jump 0
+
+gUnknown_83E387C:: @ 83E387C
+ .4byte gUnknown_83E3864
+
+gUnknown_83E3880:: @ 83E3880
+ spr_template 10072, 10072, gOamData_83ACA90, gUnknown_83E3844, NULL, gUnknown_83E387C, sub_80A66D4
gUnknown_83E3898:: @ 83E3898
- .incbin "baserom.gba", 0x3E3898, 0x30
+ .2byte 0x2758, 0x7fff, 0x735f, 0x6adf, 0x623f, 0x59bf, 0x2771, 0x7fff, 0x6bf9, 0x57f4, 0x43ef, 0x33ea, 0x27c9, 0x7fff, 0x63ff, 0x47ff
+ .2byte 0x2bff, 0x0fff, 0x27bf, 0x7fff, 0x7f9a, 0x7f55, 0x7f10, 0x7ecc
+
+gUnknown_83E38C8:: @ 83E38C8
+ spr_template 10072, 10072, gOamData_83ACA90, gUnknown_83E3844, NULL, gUnknown_83E387C, sub_80A68B0
+
+gUnknown_83E38E0:: @ 83E38E0
+ spr_template 10193, 10193, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A69B8
-gUnknown_83E38C8::
- .incbin "baserom.gba", 0x3E38C8, 0x18
+gUnknown_83E38F8:: @ 83E38F8
+ obj_rot_scal_anim_frame 160, 160, 0, 0
+ obj_rot_scal_anim_frame 4, 4, 0, 1
+ obj_rot_scal_anim_jump 1
-gUnknown_83E38E0::
- .incbin "baserom.gba", 0x3E38E0, 0x34
+gUnknown_83E3910:: @ 83E3910
+ .4byte gUnknown_83E38F8
-gUnknown_83E3914::
- .incbin "baserom.gba", 0x3E3914, 0x78
+gUnknown_83E3914:: @ 83E3914
+ spr_template 10072, 10072, gOamData_83ACA90, gUnknown_83E3844, NULL, gUnknown_83E3910, sub_80A6A28
+
+gUnknown_83E392C:: @ 83E392C
+ obj_image_anim_frame 0, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 48, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E3940:: @ 83E3940
+ obj_image_anim_frame 48, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0, 2, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E3954:: @ 83E3954
+ obj_image_anim_frame 0, 2
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 32, 2
+ obj_image_anim_frame 48, 2
+ obj_image_anim_end
+
+gUnknown_83E3968:: @ 83E3968
+ obj_image_anim_frame 48, 2
+ obj_image_anim_frame 32, 2
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 0, 2
+ obj_image_anim_end
+
+gUnknown_83E397C:: @ 83E397C
+ .4byte gUnknown_83E392C
+ .4byte gUnknown_83E3954
+ .4byte gUnknown_83E3940
+ .4byte gUnknown_83E3968
gUnknown_83E398C:: @ 83E398C
- .incbin "baserom.gba", 0x3E398C, 0xA8
+ spr_template 10209, 10209, gOamData_83AC9D8, gUnknown_83E397C, NULL, gDummySpriteAffineAnimTable, sub_80A6B64
+
+gUnknown_83E39A4:: @ 83E39A4
+ obj_rot_scal_anim_frame 16, 16, 0, 0
+ obj_rot_scal_anim_frame 30, 30, 0, 8
+ obj_rot_scal_anim_end
+
+gUnknown_83E39BC:: @ 83E39BC
+ obj_rot_scal_anim_frame 0, 0, 4, 11
+ obj_rot_scal_anim_frame 0, 0, 252, 11
+ obj_rot_scal_anim_loop 2
+ obj_rot_scal_anim_frame -30, -30, 0, 8
+ obj_rot_scal_anim_end
+
+gUnknown_83E39E4:: @ 83E39E4
+ obj_rot_scal_anim_frame 16, 16, 0, 0
+ obj_rot_scal_anim_frame 30, 30, 0, 8
+ obj_rot_scal_anim_frame 0, 0, 0, 16
+ obj_rot_scal_anim_loop 0
+ obj_rot_scal_anim_frame 0, 0, 4, 11
+ obj_rot_scal_anim_frame 0, 0, 252, 11
+ obj_rot_scal_anim_loop 2
+ obj_rot_scal_anim_frame -30, -30, 0, 8
+ obj_rot_scal_anim_end
+
+gUnknown_83E3A2C:: @ 83E3A2C
+ .4byte gUnknown_83E39A4
+ .4byte gUnknown_83E39BC
+
+gUnknown_83E3A34:: @ 83E3A34
+ spr_template 10064, 10064, gOamData_83ACA98, gDummySpriteAnimTable, NULL, gUnknown_83E3A2C, sub_80A6C08
+
+gUnknown_83E3A4C:: @ 83E3A4C
+ spr_template 10064, 10064, gOamData_83ACA38, gDummySpriteAnimTable, NULL, gUnknown_83E3A2C, sub_80A6C84
+
+gUnknown_83E3A64:: @ 83E3A64
+ obj_image_anim_frame 0, 1
+ obj_image_anim_end
+
+gUnknown_83E3A6C:: @ 83E3A6C
+ obj_image_anim_frame 0, 1, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E3A74:: @ 83E3A74
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 16, 4
+ obj_image_anim_frame 32, 4
+ obj_image_anim_frame 16, 4
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 16, 4
+ obj_image_anim_frame 32, 4
+ obj_image_anim_end
+
+gUnknown_83E3A94:: @ 83E3A94
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E3AB4:: @ 83E3AB4
+ .4byte gUnknown_83E3A64
+ .4byte gUnknown_83E3A6C
+ .4byte gUnknown_83E3A74
+ .4byte gUnknown_83E3A94
+
+gUnknown_83E3AC4:: @ 83E3AC4
+ spr_template 10214, 10214, gOamData_83AC9D8, gUnknown_83E3AB4, NULL, gDummySpriteAffineAnimTable, sub_80A6D90
+
+gUnknown_83E3ADC::
+ spr_template 10064, 10064, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A6E48
+
+gUnknown_83E3AF4:: @ 83E3AF4
+ obj_image_anim_frame 0x0004, 1
+ obj_image_anim_end
+
+gUnknown_83E3AFC::
+ .4byte gUnknown_83E3AF4
+
+gUnknown_83E3B00::
+ spr_template 10072, 10072, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A6E98
+
+gUnknown_83E3B18::
+ spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A6F8C
+
+gUnknown_83E3B30::
+ spr_template 10145, 10145, gOamData_83ACB60, gDummySpriteAnimTable, NULL, gUnknown_83E7910, sub_80A7020
+
+gUnknown_83E3B48::
+ obj_image_anim_frame 0x0000, 9
+ obj_image_anim_frame 0x0010, 3
+ obj_image_anim_frame 0x0020, 3
+ obj_image_anim_frame 0x0030, 3
+ obj_image_anim_end
+
+gUnknown_83E3B5C::
+ .4byte gUnknown_83E3B48
+
+gUnknown_83E3B60::
+ obj_rot_scal_anim_frame 80, 80, 0, 0
+ obj_rot_scal_anim_frame 9, 9, 0, 18
+ obj_rot_scal_anim_end
+
+gUnknown_83E3B78::
+ .4byte gUnknown_83E3B60
+
+gUnknown_83E3B7C::
+ spr_template 10007, 10007, gOamData_83ACA38, gUnknown_83E3B5C, NULL, gUnknown_83E3B78, AnimSpriteOnMonPos
+
+gUnknown_83E3B94:: @ 83E3B94
+ obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 8, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 24, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 40, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 48, 3, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_loop 1
+ obj_image_anim_end
-gUnknown_83E3A34::
- .incbin "baserom.gba", 0x3E3A34, 0x18
+gUnknown_83E3BB8:: @ 83E3BB8
+ .4byte gUnknown_83E3B94
-gUnknown_83E3A4C::
- .incbin "baserom.gba", 0x3E3A4C, 0x78
+gUnknown_83E3BBC:: @ 83E3BBC
+ spr_template 10075, 10075, gOamData_83AC9F8, gUnknown_83E3BB8, NULL, gDummySpriteAffineAnimTable, sub_80A71D8
-gUnknown_83E3AC4::
- .incbin "baserom.gba", 0x3E3AC4, 0xF8
+gUnknown_83E3BD4:: @ 83E3BD4
+ obj_rot_scal_anim_frame 16, 256, 0, 0
+ obj_rot_scal_anim_frame 20, 0, 0, 12
+ obj_rot_scal_anim_frame 0, 0, 0, 32
+ obj_rot_scal_anim_end
-gUnknown_83E3BBC::
- .incbin "baserom.gba", 0x3E3BBC, 0x3C
+gUnknown_83E3BF4:: @ 83E3BF4
+ .4byte gUnknown_83E3BD4
-gUnknown_83E3BF8::
- .incbin "baserom.gba", 0x3E3BF8, 0x18
+gUnknown_83E3BF8:: @ 83E3BF8
+ spr_template 10005, 10005, gOamData_83ACBA0, gDummySpriteAnimTable, NULL, gUnknown_83E3BF4, sub_80A727C
-gUnknown_83E3C10::
- .incbin "baserom.gba", 0x3E3C10, 0x18
+gUnknown_83E3C10:: @ 83E3C10
+ spr_template 10003, 10003, gOamData_83ACBD8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A72C8
gUnknown_83E3C28:: @ 83E3C28
- .incbin "baserom.gba", 0x3E3C28, 0x78
+ spr_template 10003, 10003, gOamData_83ACB18, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A74A4
-gUnknown_83E3CA0::
- .incbin "baserom.gba", 0x3E3CA0, 0x18
+gUnknown_83E3C40:: @ 83E3C40
+ obj_rot_scal_anim_frame 32, 32, 0, 0
+ obj_rot_scal_anim_frame 7, 7, 0, 200
+ obj_rot_scal_anim_end
-gUnknown_83E3CB8::
- .incbin "baserom.gba", 0x3E3CB8, 0x18
+gUnknown_83E3C58:: @ 83E3C58
+ obj_rot_scal_anim_frame 5, 5, 0, 10
+ obj_rot_scal_anim_frame -10, -10, 0, 10
+ obj_rot_scal_anim_frame 10, 10, 0, 10
+ obj_rot_scal_anim_frame -10, -10, 0, 10
+ obj_rot_scal_anim_frame 10, 10, 0, 10
+ obj_rot_scal_anim_frame -10, -10, 0, 10
+ obj_rot_scal_anim_frame 10, 10, 0, 10
+ obj_rot_scal_anim_end
-gUnknown_83E3CD0::
- .incbin "baserom.gba", 0x3E3CD0, 0x18
+gUnknown_83E3C98:: @ 83E3C98
+ .4byte gUnknown_83E3C40
-gUnknown_83E3CE8::
- .incbin "baserom.gba", 0x3E3CE8, 0x18
+gUnknown_83E3C9C:: @ 83E3C9C
+ .4byte gUnknown_83E3C58
-gUnknown_83E3D00::
- .incbin "baserom.gba", 0x3E3D00, 0x18
+gUnknown_83E3CA0:: @ 83E3CA0
+ spr_template 10163, 10163, gOamData_83ACAD8, gDummySpriteAnimTable, NULL, gUnknown_83E3C98, TranslateAnimSpriteToTargetMonLocation
+
+gUnknown_83E3CB8:: @ 83E3CB8
+ spr_template 10164, 10164, gOamData_83ACAD8, gDummySpriteAnimTable, NULL, gUnknown_83E3C98, TranslateAnimSpriteToTargetMonLocation
+
+gUnknown_83E3CD0:: @ 83E3CD0
+ spr_template 10260, 10260, gOamData_83ACAE0, gDummySpriteAnimTable, NULL, gUnknown_83E3C98, TranslateAnimSpriteToTargetMonLocation
+
+gUnknown_83E3CE8:: @ 83E3CE8
+ spr_template 10288, 10288, gOamData_83ACAD8, gDummySpriteAnimTable, NULL, gUnknown_83E3C9C, sub_80AC6D8
+
+gUnknown_83E3D00:: @ 83E3D00
+ spr_template 10175, 10175, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, AnimThrowProjectile
gUnknown_83E3D18:: @ 83E3D18
- .incbin "baserom.gba", 0x3E3D18, 0x38
+ spr_template 10178, 10178, gOamData_83ACB00, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A79E8
+
+gUnknown_83E3D30:: @ 83E3D30
+ obj_image_anim_frame 8, 1
+ obj_image_anim_end
+
+gUnknown_83E3D38:: @ 83E3D38
+ .4byte gUnknown_83E3D30
+
+gUnknown_83E3D3C:: @ 83E3D3C
+ obj_rot_scal_anim_frame 0, 0, 10, 1
+ obj_rot_scal_anim_jump 0
+
+gUnknown_83E3D4C:: @ 83E3D4C
+ .4byte gUnknown_83E3D3C
+
+gUnknown_83E3D50:: @ 83E3D50
+ spr_template 10100, 10100, gOamData_83ACA30, gUnknown_83E3D38, NULL, gDummySpriteAffineAnimTable, sub_80A7A88
+
+gUnknown_83E3D68:: @ 83E3D68
+ spr_template 10100, 10100, gOamData_83ACA30, gUnknown_83E3D38, NULL, gUnknown_83E3D4C, sub_80A7B3C
+
+gUnknown_83E3D80:: @ 83E3D80
+ obj_rot_scal_anim_frame 0, 0, 20, 1
+ obj_rot_scal_anim_jump 0
+
+gUnknown_83E3D90:: @ 83E3D90
+ .4byte gUnknown_83E3D80
+
+gUnknown_83E3D94:: @ 83E3D94
+ spr_template 10006, 10006, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gUnknown_83E3D90, sub_80A7BC4
+
+gUnknown_83E3DAC:: @ 83E3DAC
+ obj_rot_scal_anim_frame 16, 256, 0, 0
+ obj_rot_scal_anim_frame 4, 0, 0, 40
+ obj_rot_scal_anim_end
+
+gUnknown_83E3DC4:: @ 83E3DC4
+ .4byte gUnknown_83E3DAC
+
+gUnknown_83E3DC8:: @ 83E3DC8
+ spr_template 10009, 10009, gOamData_83ACA80, gDummySpriteAnimTable, NULL, gUnknown_83E3DC4, sub_80A7D04
-gUnknown_83E3D50::
- .incbin "baserom.gba", 0x3E3D50, 0x18
+gUnknown_83E3DE0:: @ 83E3DE0
+ obj_image_anim_frame 0, 3
+ obj_image_anim_frame 16, 3
+ obj_image_anim_frame 32, 20
+ obj_image_anim_end
+
+gUnknown_83E3DF0:: @ 83E3DF0
+ obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 16, 3, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 32, 20, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
-gUnknown_83E3D68::
- .incbin "baserom.gba", 0x3E3D68, 0x2C
+gUnknown_83E3E00:: @ 83E3E00
+ .4byte gUnknown_83E3DE0
+ .4byte gUnknown_83E3DF0
-gUnknown_83E3D94::
- .incbin "baserom.gba", 0x3E3D94, 0x34
+gUnknown_83E3E08:: @ 83E3E08
+ spr_template 10138, 10138, gOamData_83ACAF8, gUnknown_83E3E00, NULL, gDummySpriteAffineAnimTable, sub_80A7D64
+
+gUnknown_83E3E20:: @ 83E3E20
+ obj_image_anim_frame 0, 2
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 32, 1
+ obj_image_anim_end
-gUnknown_83E3DC8::
- .incbin "baserom.gba", 0x3E3DC8, 0x40
+gUnknown_83E3E30:: @ 83E3E30
+ obj_image_anim_frame 0, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 16, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 32, 1, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
-gUnknown_83E3E08::
- .incbin "baserom.gba", 0x3E3E08, 0x40
+gUnknown_83E3E40:: @ 83E3E40
+ .4byte gUnknown_83E3E20
+ .4byte gUnknown_83E3E30
-gUnknown_83E3E48::
- .incbin "baserom.gba", 0x3E3E48, 0x18
+gUnknown_83E3E48:: @ 83E3E48
+ spr_template 10138, 10138, gOamData_83ACAF8, gUnknown_83E3E40, NULL, gDummySpriteAffineAnimTable, sub_80A7E14
gUnknown_83E3E60:: @ 83E3E60
- .incbin "baserom.gba", 0x3E3E60, 0x20
+ obj_rot_scal_anim_frame -6, 4, 0, 8
+ obj_rot_scal_anim_frame 10, -10, 0, 8
+ obj_rot_scal_anim_frame -4, 6, 0, 8
+ obj_rot_scal_anim_end
gUnknown_83E3E80:: @ 83E3E80
- .incbin "baserom.gba", 0x3E3E80, 0x50
+ obj_rot_scal_anim_frame -4, -5, 0, 12
+ obj_rot_scal_anim_frame 0, 0, 0, 24
+ obj_rot_scal_anim_frame 4, 5, 0, 12
+ obj_rot_scal_anim_end
+
+gUnknown_83E3EA0:: @ 83E3EA0
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 4, 40, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 12, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E3EB4:: @ 83E3EB4
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 4, 40
+ obj_image_anim_frame 8, 4
+ obj_image_anim_frame 12, 4
+ obj_image_anim_end
+
+gUnknown_83E3EC8:: @ 83E3EC8
+ .4byte gUnknown_83E3EA0
+ .4byte gUnknown_83E3EB4
-gUnknown_83E3ED0::
- .incbin "baserom.gba", 0x3E3ED0, 0x34
+gUnknown_83E3ED0:: @ 83E3ED0
+ spr_template 10086, 10086, gOamData_83AC9D0, gUnknown_83E3EC8, NULL, gDummySpriteAffineAnimTable, sub_80A851C
-gUnknown_83E3F04::
- .incbin "baserom.gba", 0x3E3F04, 0x18
+gUnknown_83E3EE8:: @ 83E3EE8
+ obj_rot_scal_anim_frame 11, 11, 0, 8
+ obj_rot_scal_anim_frame -11, -11, 0, 8
+ obj_rot_scal_anim_end
+
+gUnknown_83E3F00:: @ 83E3F00
+ .4byte gUnknown_83E3EE8
+
+gUnknown_83E3F04:: @ 83E3F04
+ spr_template 10087, 10087, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gUnknown_83E3F00, sub_80A85AC
gUnknown_83E3F1C:: @ 83E3F1C
- .incbin "baserom.gba", 0x3E3F1C, 0x30
+ obj_rot_scal_anim_frame -10, 9, 0, 7
+ obj_rot_scal_anim_frame 20, -20, 0, 7
+ obj_rot_scal_anim_frame -20, 20, 0, 7
+ obj_rot_scal_anim_frame 10, -9, 0, 7
+ obj_rot_scal_anim_loop 2
+ obj_rot_scal_anim_end
+
+gUnknown_83E3F4C:: @ 83E3F4C
+ spr_template 10002, 10002, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A8A1C
+
+gUnknown_83E3F64:: @ 83E3F64
+ spr_template 10197, 10197, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, AnimSnoreZ
+
+gUnknown_83E3F7C:: @ 83E3F7C
+ obj_image_anim_frame 0, 5
+ obj_image_anim_frame 16, 5
+ obj_image_anim_frame 32, 5
+ obj_image_anim_frame 48, 5
+ obj_image_anim_end
+
+gUnknown_83E3F90:: @ 83E3F90
+ .4byte gUnknown_83E3F7C
+
+gUnknown_83E3F94:: @ 83E3F94
+ spr_template 10198, 10198, gOamData_83AC9D8, gUnknown_83E3F90, NULL, gDummySpriteAffineAnimTable, AnimSpriteOnMonPos
+
+gUnknown_83E3FAC:: @ 83E3FAC
+ obj_rot_scal_anim_frame 0, 0, 248, 2
+ obj_rot_scal_anim_frame 0, 0, 8, 4
+ obj_rot_scal_anim_frame 0, 0, 248, 2
+ obj_rot_scal_anim_jump 0
+
+gUnknown_83E3FCC:: @ 83E3FCC
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E3FDC:: @ 83E3FDC
+ obj_rot_scal_anim_frame -8, 4, 0, 8
+ obj_rot_scal_anim_loop 0
+ obj_rot_scal_anim_frame 16, -8, 0, 8
+ obj_rot_scal_anim_frame -16, 8, 0, 8
+ obj_rot_scal_anim_loop 1
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_frame 0, 0, 0, 15
+ obj_rot_scal_anim_end
+
+gUnknown_83E401C:: @ 83E401C
+ .4byte gUnknown_83E3FAC
+ .4byte gUnknown_83E3FCC
+ .4byte gUnknown_83E3FDC
-gUnknown_83E3F4C::
- .incbin "baserom.gba", 0x3E3F4C, 0x18
+gUnknown_83E4028:: @ 83E4028
+ spr_template 10202, 10202, gOamData_83ACBB8, gDummySpriteAnimTable, NULL, gUnknown_83E401C, sub_80A8F38
-gUnknown_83E3F64::
- .incbin "baserom.gba", 0x3E3F64, 0x30
+gUnknown_83E4040:: @ 83E4040
+ obj_rot_scal_anim_frame 16, 16, 0, 0
+ obj_rot_scal_anim_frame 16, 16, 0, 30
+ obj_rot_scal_anim_end 1
-gUnknown_83E3F94::
- .incbin "baserom.gba", 0x3E3F94, 0x94
+gUnknown_83E4058:: @ 83E4058
+ obj_rot_scal_anim_frame 16, 16, 0, 0
+ obj_rot_scal_anim_frame 32, 32, 0, 15
+ obj_rot_scal_anim_end 1
-gUnknown_83E4028::
- .incbin "baserom.gba", 0x3E4028, 0x6C
+gUnknown_83E4070:: @ 83E4070
+ obj_rot_scal_anim_frame 16, 16, 0, 0
+ obj_rot_scal_anim_frame 11, 11, 0, 45
+ obj_rot_scal_anim_end 1
-gUnknown_83E4094::
- .incbin "baserom.gba", 0x3E4094, 0x34
+gUnknown_83E4088:: @ 83E4088
+ .4byte gUnknown_83E4040
+ .4byte gUnknown_83E4058
-gUnknown_83E40C8::
- .incbin "baserom.gba", 0x3E40C8, 0x18
+gUnknown_83E4090:: @ 83E4090
+ .4byte gUnknown_83E4070
-gUnknown_83E40E0::
- .incbin "baserom.gba", 0x3E40E0, 0x18
+gUnknown_83E4094:: @ 83E4094
+ spr_template 10203, 10203, gOamData_83ACAA0, gDummySpriteAnimTable, NULL, gUnknown_83E4088, AnimSpriteOnMonPos
-gUnknown_83E40F8::
- .incbin "baserom.gba", 0x3E40F8, 0x18
+gUnknown_83E40AC:: @ 83E40AC
+ obj_rot_scal_anim_frame 512, 512, 0, 0
+ obj_rot_scal_anim_frame -16, -16, 0, 30
+ obj_rot_scal_anim_end 1
-gUnknown_83E4110::
- .incbin "baserom.gba", 0x3E4110, 0x18
+gUnknown_83E40C4:: @ 83E40C4
+ .4byte gUnknown_83E40AC
+
+gUnknown_83E40C8:: @ 83E40C8
+ spr_template 10203, 10203, gOamData_83ACBC0, gDummySpriteAnimTable, NULL, gUnknown_83E40C4, AnimSpriteOnMonPos
+
+gUnknown_83E40E0:: @ 83E40E0
+ spr_template 10203, 10203, gOamData_83ACBC0, gDummySpriteAnimTable, NULL, gUnknown_83E4088, sub_80A8BC4
+
+gUnknown_83E40F8:: @ 83E40F8
+ spr_template 10203, 10203, gOamData_83ACBC0, gDummySpriteAnimTable, NULL, gUnknown_83E4090, sub_80A8CA4
+
+gUnknown_83E4110:: @ 83E4110
+ spr_template 10203, 10203, gOamData_83ACBC0, gDummySpriteAnimTable, NULL, gUnknown_83E4088, sub_80A8EE8
gUnknown_83E4128:: @ 83E4128
- .incbin "baserom.gba", 0x3E4128, 0x2C
+ obj_rot_scal_anim_frame 96, -13, 0, 8
+ obj_rot_scal_anim_end
+
+gUnknown_83E4138:: @ 83E4138
+ obj_image_anim_frame 0, 3
+ obj_image_anim_frame 4, 3
+ obj_image_anim_frame 8, 3
+ obj_image_anim_frame 4, 3
+ obj_image_anim_frame 0, 3
+ obj_image_anim_end
+
+gUnknown_83E4150:: @ 83E4150
+ .4byte gUnknown_83E4138
gUnknown_83E4154:: @ 83E4154
- .incbin "baserom.gba", 0x3E4154, 0x18
+ spr_template 10207, 10207, gOamData_83AC9D0, gUnknown_83E4150, NULL, gDummySpriteAffineAnimTable, sub_80A9648
gUnknown_83E416C:: @ 83E416C
- .incbin "baserom.gba", 0x3E416C, 0x44
+ .byte 0x1e, 0x1c, 0xec, 0x18, 0x10, 0x1a, 0xf6, 0x1c
+
+gUnknown_83E4174:: @ 83E4174
+ obj_image_anim_frame 0, 6
+ obj_image_anim_frame 16, 6
+ obj_image_anim_frame 32, 15
+ obj_image_anim_frame 16, 6
+ obj_image_anim_frame 0, 6
+ obj_image_anim_frame 16, 6, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 15, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 6, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0, 6
+ obj_image_anim_frame 16, 6
+ obj_image_anim_frame 32, 15
+ obj_image_anim_frame 16, 6
+ obj_image_anim_frame 0, 6
+ obj_image_anim_end
+
+gUnknown_83E41AC:: @ 83E41AC
+ .4byte gUnknown_83E4174
-gUnknown_83E41B0::
- .incbin "baserom.gba", 0x3E41B0, 0x18
+gUnknown_83E41B0:: @ 83E41B0
+ spr_template 10205, 10205, gOamData_83AC9D8, gUnknown_83E41AC, NULL, gDummySpriteAffineAnimTable, AnimSpriteOnMonPos
gUnknown_83E41C8:: @ 83E41C8
- .incbin "baserom.gba", 0x3E41C8, 0x8
+ .2byte 10206, 9999, 9998
-gUnknown_83E41D0::
- .incbin "baserom.gba", 0x3E41D0, 0x18
+ .align 2
+gUnknown_83E41D0:: @ 83E41D0
+ spr_template 10206, 10206, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A97E8
-gUnknown_83E41E8::
- .incbin "baserom.gba", 0x3E41E8, 0x18
+gUnknown_83E41E8:: @ 83E41E8
+ spr_template 10210, 10210, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A9860
gUnknown_83E4200:: @ 83E4200
- .incbin "baserom.gba", 0x3E4200, 0x18
+ obj_rot_scal_anim_frame 10, -13, 0, 10
+ obj_rot_scal_anim_frame -10, 13, 0, 10
+ obj_rot_scal_anim_end
+
+gUnknown_83E4218:: @ 83E4218
+ spr_template 10216, 10216, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A9B40
-gUnknown_83E4218::
- .incbin "baserom.gba", 0x3E4218, 0x18
+gUnknown_83E4230:: @ 83E4230
+ spr_template 10216, 10216, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A9BC4
-gUnknown_83E4230::
- .incbin "baserom.gba", 0x3E4230, 0x18
+gUnknown_83E4248:: @ 83E4248
+ spr_template 10216, 10216, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A9C4C
-gUnknown_83E4248::
- .incbin "baserom.gba", 0x3E4248, 0x34
+gUnknown_83E4260:: @ 83E4260
+ obj_rot_scal_anim_frame 128, 128, 0, 0
+ obj_rot_scal_anim_frame 8, 8, 0, 1
+ obj_rot_scal_anim_jump 1
-gUnknown_83E427C::
- .incbin "baserom.gba", 0x3E427C, 0x18
+gUnknown_83E4278:: @ 83E4278
+ .4byte gUnknown_83E4260
-gUnknown_83E4294::
- .incbin "baserom.gba", 0x3E4294, 0x34
+gUnknown_83E427C:: @ 83E427C
+ spr_template 10217, 10217, gOamData_83ACA30, gDummySpriteAnimTable, NULL, gUnknown_83E4278, sub_80AA174
-gUnknown_83E42C8::
- .incbin "baserom.gba", 0x3E42C8, 0x34
+gUnknown_83E4294:: @ 83E4294
+ spr_template 10217, 10217, gOamData_83ACA90, gDummySpriteAnimTable, NULL, gUnknown_83E4278, sub_80AA2B0
-gUnknown_83E42FC::
- .incbin "baserom.gba", 0x3E42FC, 0x24
+gUnknown_83E42AC:: @ 83E42AC
+ obj_rot_scal_anim_frame 128, 128, 0, 0
+ obj_rot_scal_anim_frame 8, 8, 0, 1
+ obj_rot_scal_anim_jump 1
-gUnknown_83E4320::
- .incbin "baserom.gba", 0x3E4320, 0x18
+gUnknown_83E42C4:: @ 83E42C4
+ .4byte gUnknown_83E42AC
-gUnknown_83E4338::
- .incbin "baserom.gba", 0x3E4338, 0x30
+gUnknown_83E42C8:: @ 83E42C8
+ spr_template 10237, 10237, gOamData_83ACA88, gDummySpriteAnimTable, NULL, gUnknown_83E42C4, sub_80AA37C
-gUnknown_83E4368::
- .incbin "baserom.gba", 0x3E4368, 0x48
+gUnknown_83E42E0:: @ 83E42E0
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 4, 4
+ obj_image_anim_frame 8, 4
+ obj_image_anim_frame 4, 4
+ obj_image_anim_frame 0, 4
+ obj_image_anim_end
-gUnknown_83E43B0::
- .incbin "baserom.gba", 0x3E43B0, 0x48
+gUnknown_83E42F8:: @ 83E42F8
+ .4byte gUnknown_83E42E0
-gUnknown_83E43F8::
- .incbin "baserom.gba", 0x3E43F8, 0x18
+gUnknown_83E42FC:: @ 83E42FC
+ spr_template 10218, 10218, gOamData_83AC9D0, gUnknown_83E42F8, NULL, gDummySpriteAffineAnimTable, sub_80AA3F0
-gUnknown_83E4410:: @ 83E4410
- .incbin "baserom.gba", 0x3E4410, 0x20
+gUnknown_83E4314:: @ 83E4314
+ obj_image_anim_frame 0, 24
+ obj_image_anim_end
+
+gUnknown_83E431C:: @ 83E431C
+ .4byte gUnknown_83E4314
+
+gUnknown_83E4320:: @ 83E4320
+ spr_template 10220, 10220, gOamData_83AC9D8, gUnknown_83E431C, NULL, gDummySpriteAffineAnimTable, sub_80AA408
+
+gUnknown_83E4338:: @ 83E4338
+ spr_template 10219, 10219, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80AA508
+
+gUnknown_83E4350:: @ 83E4350
+ obj_image_anim_frame 0, 3
+ obj_image_anim_jump 0
+
+gUnknown_83E4358:: @ 83E4358
+ obj_image_anim_frame 16, 3
+ obj_image_anim_jump 0
+
+gUnknown_83E4360:: @ 83E4360
+ .4byte gUnknown_83E4350
+ .4byte gUnknown_83E4358
+
+gUnknown_83E4368:: @ 83E4368
+ spr_template 10221, 10221, gOamData_83AC9D8, gUnknown_83E4360, NULL, gDummySpriteAffineAnimTable, sub_80AA58C
-gUnknown_83E4430::
- .incbin "baserom.gba", 0x3E4430, 0x54
+gUnknown_83E4380:: @ 83E4380
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 16, 4
+ obj_image_anim_frame 32, 4
+ obj_image_anim_frame 48, 4
+ obj_image_anim_end
+
+gUnknown_83E4394:: @ 83E4394
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 48, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E43A8:: @ 83E43A8
+ .4byte gUnknown_83E4380
+ .4byte gUnknown_83E4394
+
+gUnknown_83E43B0:: @ 83E43B0
+ spr_template 10222, 10222, gOamData_83AC9D8, gUnknown_83E43A8, NULL, gDummySpriteAffineAnimTable, sub_80AA6B8
+
+gUnknown_83E43C8:: @ 83E43C8
+ obj_image_anim_frame 0, 8
+ obj_image_anim_frame 16, 8
+ obj_image_anim_frame 32, 8
+ obj_image_anim_frame 16, 8
+ obj_image_anim_end
+
+gUnknown_83E43DC:: @ 83E43DC
+ obj_image_anim_frame 16, 8, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 32, 8, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 16, 8, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0, 8, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gUnknown_83E43F0:: @ 83E43F0
+ .4byte gUnknown_83E43C8
+ .4byte gUnknown_83E43DC
-gUnknown_83E4484::
- .incbin "baserom.gba", 0x3E4484, 0x18
+gUnknown_83E43F8:: @ 83E43F8
+ spr_template 10215, 10215, gOamData_83AC9D8, gUnknown_83E43F0, NULL, gDummySpriteAffineAnimTable, sub_80AA708
-gUnknown_83E449C::
- .incbin "baserom.gba", 0x3E449C, 0x40
+gUnknown_83E4410:: @ 83E4410
+ obj_rot_scal_anim_frame -12, 8, 0, 4
+ obj_rot_scal_anim_frame 20, -20, 0, 4
+ obj_rot_scal_anim_frame -8, 12, 0, 4
+ obj_rot_scal_anim_end
+
+gUnknown_83E4430:: @ 83E4430
+ spr_template 10225, 10225, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80AA838
+
+gUnknown_83E4448:: @ 83E4448
+ obj_rot_scal_anim_frame 0, 0, 0, 5
+ obj_rot_scal_anim_end
+
+gUnknown_83E4458:: @ 83E4458
+ obj_rot_scal_anim_frame 0, 0, 248, 16
+ obj_rot_scal_anim_end 1
+
+gUnknown_83E4468:: @ 83E4468
+ obj_rot_scal_anim_frame 0, 0, 8, 16
+ obj_rot_scal_anim_end 1
+
+gUnknown_83E4478:: @ 83E4478
+ .4byte gUnknown_83E4448
+ .4byte gUnknown_83E4458
+ .4byte gUnknown_83E4468
+
+gUnknown_83E4484:: @ 83E4484
+ spr_template 10206, 10206, gOamData_83ACA30, gUnknown_83E3844, NULL, gUnknown_83E4478, sub_80AA998
+
+gUnknown_83E449C:: @ 83E449C
+ spr_template 10206, 10206, gOamData_83ACA30, gUnknown_83E3844, NULL, gUnknown_83E4478, sub_80AA938
+
+gUnknown_83E44B4:: @ 83E44B4
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E44C4:: @ 83E44C4
+ obj_rot_scal_anim_frame 512, 256, 0, 0
+ obj_rot_scal_anim_end
+
+gUnknown_83E44D4:: @ 83E44D4
+ .4byte gUnknown_83E44B4
+ .4byte gUnknown_83E44C4
+
+gUnknown_83E44DC:: @ 83E44DC
+ spr_template 10244, 10244, gOamData_83ACBE0, gDummySpriteAnimTable, NULL, gUnknown_83E44D4, sub_80AAAE4
+
+gUnknown_83E44F4:: @ 83E44F4
+ .incbin "graphics/battle_anims/unk_83E4874.4bpp"
+
+gUnknown_83E4874::
+ .incbin "graphics/battle_anims/unk_83E4874.bin"
+
+gUnknown_83E5874:: @ 83E5874
+ obj_image_anim_frame 0, 2
+ obj_image_anim_frame 8, 2
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 24, 6
+ obj_image_anim_frame 32, 2
+ obj_image_anim_frame 40, 2
+ obj_image_anim_frame 48, 2
+ obj_image_anim_end
-gUnknown_83E44DC::
- .incbin "baserom.gba", 0x3E44DC, 0x13BC
+gUnknown_83E5894:: @ 83E5894
+ .4byte gUnknown_83E5874
gUnknown_83E5898:: @ 83E5898
- .incbin "baserom.gba", 0x3E5898, 0x48
+ spr_template 10115, 10115, gOamData_83ACA18, gUnknown_83E5894, NULL, gDummySpriteAffineAnimTable, sub_80AAC54
+
+gUnknown_83E58B0:: @ 83E58B0
+ obj_rot_scal_anim_frame -5, -5, 0, 10
+ obj_rot_scal_anim_frame 5, 5, 0, 10
+ obj_rot_scal_anim_jump 0
+
+gUnknown_83E58C8:: @ 83E58C8
+ .4byte gUnknown_83E58B0
+
+gUnknown_83E58CC:: @ 83E58CC
+ obj_image_anim_frame 0, 1
+ obj_image_anim_frame 4, 5
+ obj_image_anim_frame 8, 5
+ obj_image_anim_end
+
+gUnknown_83E58DC:: @ 83E58DC
+ .4byte gUnknown_83E58CC
+
+gUnknown_83E58E0:: @ 83E58E0
+ spr_template 10146, 10146, gOamData_83ACB50, gUnknown_83E58DC, NULL, gUnknown_83E58C8, sub_80AAC98
-gUnknown_83E58E0::
- .incbin "baserom.gba", 0x3E58E0, 0x4C
+gUnknown_83E58F8:: @ 83E58F8
+ obj_image_anim_frame 0, 1
+ obj_image_anim_end
+
+gUnknown_83E5900:: @ 83E5900
+ obj_image_anim_frame 4, 1
+ obj_image_anim_end
-gUnknown_83E592C::
- .incbin "baserom.gba", 0x3E592C, 0x2C
+gUnknown_83E5908:: @ 83E5908
+ .4byte gUnknown_83E58F8
+ .4byte gUnknown_83E5900
+
+gUnknown_83E5910:: @ 83E5910
+ obj_rot_scal_anim_frame 0, 0, 0, 1
+ obj_rot_scal_anim_frame 96, 96, 0, 1
+ obj_rot_scal_anim_end
+
+gUnknown_83E5928:: @ 83E5928
+ .4byte gUnknown_83E5910
+
+gUnknown_83E592C:: @ 83E592C
+ spr_template 10140, 10140, gOamData_83ACAC8, gUnknown_83E5908, NULL, gUnknown_83E5928, sub_80AAE84
+
+gUnknown_83E5944:: @ 83E5944
+ obj_image_anim_frame 0, 1
+ obj_image_anim_frame 4, 1
+ obj_image_anim_frame 8, 1
+ obj_image_anim_frame 12, 1
+ obj_image_anim_jump 0
gUnknown_83E5958:: @ 83E5958
- .incbin "baserom.gba", 0x3E5958, 0x4
+ .4byte gUnknown_83E5944
+
+gUnknown_83E595C:: @ 83E595C
+ spr_template 10149, 10149, gOamData_83ACAF0, gUnknown_83E5958, NULL, gDummySpriteAffineAnimTable, sub_80AB024
+
+gUnknown_83E5974:: @ 83E5974
+ spr_template 10259, 10259, gOamData_83ACAF0, gUnknown_83E5958, NULL, gDummySpriteAffineAnimTable, sub_80AB024
+
+gUnknown_83E598C:: @ 83E598C
+ spr_template 10264, 10264, gOamData_83AC9C8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80AB024
+
+gUnknown_83E59A4:: @ 83E59A4
+ spr_template 10265, 10265, gOamData_83AC9C8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80AB024
+
+gUnknown_83E59BC:: @ 83E59BC
+ obj_image_anim_frame 16, 2
+ obj_image_anim_frame 32, 2
+ obj_image_anim_frame 48, 2
+ obj_image_anim_jump 0
+
+gUnknown_83E59CC:: @ 83E59CC
+ .4byte gUnknown_83E59BC
+
+gUnknown_83E59D0:: @ 83E59D0
+ spr_template 10029, 10029, gOamData_83AC9D8, gUnknown_83E59CC, NULL, gDummySpriteAffineAnimTable, sub_80AB024
+
+gUnknown_83E59E8:: @ 83E59E8
+ spr_template 10165, 10165, gOamData_83ACAD8, gDummySpriteAnimTable, NULL, gUnknown_83E3C98, sub_80AB024
-gUnknown_83E595C::
- .incbin "baserom.gba", 0x3E595C, 0x18
+gUnknown_83E5A00:: @ 83E5A00
+ obj_rot_scal_anim_frame 3, 3, 10, 50
+ obj_rot_scal_anim_frame 0, 0, 0, 10
+ obj_rot_scal_anim_frame -20, -20, 246, 20
+ obj_rot_scal_anim_end
-gUnknown_83E5974::
- .incbin "baserom.gba", 0x3E5974, 0x18
+gUnknown_83E5A20:: @ 83E5A20
+ obj_rot_scal_anim_frame 336, 336, 0, 0
+ obj_rot_scal_anim_end
-gUnknown_83E598C::
- .incbin "baserom.gba", 0x3E598C, 0x18
+gUnknown_83E5A30:: @ 83E5A30
+ .4byte gUnknown_83E5A00
-gUnknown_83E59A4::
- .incbin "baserom.gba", 0x3E59A4, 0x2C
+gUnknown_83E5A34:: @ 83E5A34
+ .4byte gUnknown_83E5A20
-gUnknown_83E59D0::
- .incbin "baserom.gba", 0x3E59D0, 0x18
+gUnknown_83E5A38:: @ 83E5A38
+ spr_template 10149, 10149, gOamData_83ACBB0, gUnknown_83E5958, NULL, gUnknown_83E5A30, sub_80AB168
-gUnknown_83E59E8::
- .incbin "baserom.gba", 0x3E59E8, 0x50
+gUnknown_83E5A50:: @ 83E5A50
+ spr_template 10149, 10149, gOamData_83ACBB0, gUnknown_83E5958, NULL, gUnknown_83E5A34, sub_80AB1F8
-gUnknown_83E5A38::
- .incbin "baserom.gba", 0x3E5A38, 0x18
+gUnknown_83E5A68:: @ 83E5A68
+ obj_image_anim_frame 0, 1
+ obj_image_anim_end
+
+gUnknown_83E5A70:: @ 83E5A70
+ obj_image_anim_frame 4, 1
+ obj_image_anim_end
-gUnknown_83E5A50::
- .incbin "baserom.gba", 0x3E5A50, 0x28
+gUnknown_83E5A78:: @ 83E5A78
+ .4byte gUnknown_83E5A68
-gUnknown_83E5A78::
- .incbin "baserom.gba", 0x3E5A78, 0x8
+gUnknown_83E5A7C:: @ 83E5A7C
+ .4byte gUnknown_83E5A70
-gUnknown_83E5A80::
- .incbin "baserom.gba", 0x3E5A80, 0x18
+gUnknown_83E5A80:: @ 83E5A80
+ spr_template 10155, 10155, gOamData_83ACAF0, gUnknown_83E5A78, NULL, gDummySpriteAffineAnimTable, AnimThrowProjectile
-gUnknown_83E5A98::
- .incbin "baserom.gba", 0x3E5A98, 0x18
+gUnknown_83E5A98:: @ 83E5A98
+ spr_template 10155, 10155, gOamData_83ACBB0, gUnknown_83E5A7C, NULL, gUnknown_83E6A80, sub_80AB2CC
-gUnknown_83E5AB0::
- .incbin "baserom.gba", 0x3E5AB0, 0x18
+gUnknown_83E5AB0:: @ 83E5AB0
+ spr_template 10141, 10141, gOamData_83AC9C8, gUnknown_83E6330, NULL, gDummySpriteAffineAnimTable, sub_80AB308
-gUnknown_83E5AC8::
- .incbin "baserom.gba", 0x3E5AC8, 0x18
+gUnknown_83E5AC8:: @ 83E5AC8
+ spr_template 10155, 10155, gOamData_83AC9C8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80ABA78
gUnknown_83E5AE0:: @ 83E5AE0
- .incbin "baserom.gba", 0x3E5AE0, 0x90
+ spr_template 10268, 10268, gOamData_83AC9C8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80ABF60
+
+gUnknown_83E5AF8:: @ 83E5AF8
+ obj_image_anim_frame 8, 1
+ obj_image_anim_end
+
+gUnknown_83E5B00:: @ 83E5B00
+ obj_image_anim_frame 9, 1
+ obj_image_anim_end
+
+gUnknown_83E5B08:: @ 83E5B08
+ obj_image_anim_frame 4, 1
+ obj_image_anim_end
+
+gUnknown_83E5B10:: @ 83E5B10
+ .4byte gUnknown_83E5AF8
+ .4byte gUnknown_83E5B00
+
+gUnknown_83E5B18:: @ 83E5B18
+ .4byte gUnknown_83E5B08
+
+gUnknown_83E5B1C:: @ 83E5B1C
+ obj_rot_scal_anim_frame 256, 256, 0, 0
+ obj_rot_scal_anim_frame -10, -10, 0, 15
+ obj_rot_scal_anim_end
+
+gUnknown_83E5B34:: @ 83E5B34
+ obj_rot_scal_anim_frame 224, 224, 0, 0
+ obj_rot_scal_anim_frame -8, -8, 0, 15
+ obj_rot_scal_anim_end
+
+gUnknown_83E5B4C:: @ 83E5B4C
+ obj_rot_scal_anim_frame 336, 336, 0, 0
+ obj_rot_scal_anim_frame 0, 0, 0, 15
+ obj_rot_scal_anim_end
+
+gUnknown_83E5B64:: @ 83E5B64
+ .4byte gUnknown_83E5B1C
+ .4byte gUnknown_83E5B34
+
+gUnknown_83E5B6C:: @ 83E5B6C
+ .4byte gUnknown_83E5B4C
-gUnknown_83E5B70::
- .incbin "baserom.gba", 0x3E5B70, 0x18
+gUnknown_83E5B70:: @ 83E5B70
+ spr_template 10155, 10155, gOamData_83AC9C8, gUnknown_83E5B10, NULL, gDummySpriteAffineAnimTable, sub_80AC624
gUnknown_83E5B88:: @ 83E5B88
- .incbin "baserom.gba", 0x3E5B88, 0x18
+ spr_template 10155, 10155, gOamData_83ACA28, gUnknown_83E5B10, NULL, gUnknown_83E5B64, sub_80AC698
gUnknown_83E5BA0:: @ 83E5BA0
- .incbin "baserom.gba", 0x3E5BA0, 0x18
+ spr_template 10155, 10155, gOamData_83ACA30, gUnknown_83E5B18, NULL, gUnknown_83E5B6C, sub_8077350
diff --git a/data/battle_anim_special.s b/data/battle_anim_special.s
index 341f6b4df..967e27674 100644
--- a/data/battle_anim_special.s
+++ b/data/battle_anim_special.s
@@ -1,37 +1,148 @@
#include "constants/region_map.h"
#include "constants/flags.h"
#include "constants/moves.h"
+#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_840BF3C:: @ 840BF3C
- .incbin "baserom.gba", 0x40BF3C, 0xC
+ .byte 10, 2, -3, 0
+ .byte 15, 0, -4, 0
+ .byte -10, 2, -4, 0
gUnknown_840BF48:: @ 840BF48
- .incbin "baserom.gba", 0x40BF48, 0x60
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55020
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55021
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55022
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55023
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55024
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55025
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55026
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55027
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55028
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55029
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55030
+ obj_tiles gFile_graphics_battle_anims_sprites_particles_sheet, 0x0100, 55031
gUnknown_840BFA8:: @ 840BFA8
- .incbin "baserom.gba", 0x40BFA8, 0xC0
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55020
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55021
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55022
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55023
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55024
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55025
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55026
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55027
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55028
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55029
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55030
+ obj_pal gFile_graphics_battle_anims_sprites_136_palette, 55031
+
+gAnimCmd_840C008:: @ 840C008
+ obj_image_anim_frame 0x0000, 1
+ obj_image_anim_frame 0x0001, 1
+ obj_image_anim_frame 0x0002, 1
+ obj_image_anim_frame 0x0000, 1, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 0x0002, 1
+ obj_image_anim_frame 0x0001, 1
+ obj_image_anim_jump 0x0000
+
+gAnimCmd_840C024:: @ 840C024
+ obj_image_anim_frame 0x0003, 1
+ obj_image_anim_end
+
+gAnimCmd_840C02C:: @ 840C02C
+ obj_image_anim_frame 0x0004, 1
+ obj_image_anim_end
+
+gAnimCmd_840C034:: @ 840C034
+ obj_image_anim_frame 0x0005, 1
+ obj_image_anim_end
+
+gAnimCmd_840C03C:: @ 840C03C
+ obj_image_anim_frame 0x0006, 4
+ obj_image_anim_frame 0x0007, 4
+ obj_image_anim_jump 0x0000
+
+gAnimCmd_840C048:: @ 840C048
+ obj_image_anim_frame 0x0007, 4
+ obj_image_anim_end
+
+gSpriteAnimTable_840C050::
+ .4byte gAnimCmd_840C008
+ .4byte gAnimCmd_840C024
+ .4byte gAnimCmd_840C02C
+ .4byte gAnimCmd_840C034
+ .4byte gAnimCmd_840C03C
+ .4byte gAnimCmd_840C048
gUnknown_840C068:: @ 840C068
- .incbin "baserom.gba", 0x40C068, 0xC
+ .byte 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, 0x02, 0x03, 0x05, 0x05, 0x04, 0x04
gUnknown_840C074:: @ 840C074
- .incbin "baserom.gba", 0x40C074, 0x30
+ .4byte sub_80F06A4
+ .4byte sub_80F0C28
+ .4byte sub_80F0A20
+ .4byte sub_80F0B20
+ .4byte sub_80F0F10
+ .4byte sub_80F0A20
+ .4byte sub_80F091C
+ .4byte sub_80F0B20
+ .4byte sub_80F0DB4
+ .4byte sub_80F0818
+ .4byte sub_80F0C28
+ .4byte sub_80F103C
gUnknown_840C0A4:: @ 840C0A4
- .incbin "baserom.gba", 0x40C0A4, 0x60
+ spr_template 55020, 55020, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+
+gUnknown_840C0BC::
+ spr_template 55021, 55021, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55022, 55022, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55023, 55023, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_840C104:: @ 840C104
- .incbin "baserom.gba", 0x40C104, 0xC0
+ spr_template 55024, 55024, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55025, 55025, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55026, 55026, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55027, 55027, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55028, 55028, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55029, 55029, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55030, 55030, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ spr_template 55031, 55031, gOamData_83AC9C8, gSpriteAnimTable_840C050, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_840C1C4:: @ 840C1C4
- .incbin "baserom.gba", 0x40C1C4, 0x28
+ .2byte RGB(31, 22, 30)
+ .2byte RGB(16, 23, 30)
+ .2byte RGB(23, 30, 20)
+ .2byte RGB(31, 31, 15)
+ .2byte RGB(23, 20, 28)
+ .2byte RGB(21, 31, 25)
+ .2byte RGB(12, 25, 30)
+ .2byte RGB(30, 27, 10)
+ .2byte RGB(31, 24, 16)
+ .2byte RGB(29, 30, 30)
+ .2byte RGB(31, 17, 10)
+ .2byte RGB(31, 9, 10)
+
+gUnknown_840C1DC:: @ 840C1DC
+ .byte 0x00, 0x00, 0x01, 0x02, 0x03
+ .byte 0x04, 0x01, 0x01, 0x00, 0x01
+ .byte 0x03, 0x05, 0x06, 0x05, 0x04
+ .align 2
gUnknown_840C1EC::
- .incbin "baserom.gba", 0x40C1EC, 0x24
+ spr_template 10269, 10269, gOamData_83AC9D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80F1B3C
+
+gUnknown_840C204::
+ obj_image_anim_frame 0x0040, 1
+ obj_image_anim_end
+
+gSpriteAnimTable_840C20C::
+ .4byte gUnknown_840C204
gUnknown_840C210::
- .incbin "baserom.gba", 0x40C210, 0x18
+ spr_template 10058, 10058, gOamData_83AC9D8, gSpriteAnimTable_840C20C, NULL, gDummySpriteAffineAnimTable, sub_80F1B3C
+
diff --git a/data/battle_message.s b/data/battle_message.s
index e6ec14116..4f7576103 100644
--- a/data/battle_message.s
+++ b/data/battle_message.s
@@ -1797,7 +1797,7 @@ gUnknown_83FDDEB:: @ 83FDDEB
.string "$"
.align 2
-gUnknown_83FDF3C:: @ 83FDF3C
+gBattleStringsTable:: @ 83FDF3C
.4byte gUnknown_83FB219
.4byte gUnknown_83FB265
.4byte gUnknown_83FB28E
@@ -2448,21 +2448,21 @@ gTrappingMoves:: @ 83FE664
.2byte MOVE_SAND_TOMB
.2byte 0xFFFF
-gUnknown_83FE672:: @ 83FE672
+gText_PkmnIsEvolving:: @ 83FE672
.string "What?\n"
.string "{STR_VAR_1} is evolving!$"
-gUnknown_83FE688:: @ 83FE688
+gText_CongratsPkmnEvolved:: @ 83FE688
.string "Congratulations! Your {STR_VAR_1}\n"
.string "evolved into {STR_VAR_2}!{WAIT_SE}\p"
.string "$"
-gUnknown_83FE6B5:: @ 83FE6B5
+gText_PkmnStoppedEvolving:: @ 83FE6B5
.string "Huh? {STR_VAR_1}\n"
.string "stopped evolving!\p"
.string "$"
-gUnknown_83FE6D0:: @ 83FE6D0
+gText_EllipsisQuestionMark:: @ 83FE6D0
.string "……?\p"
.string "$"
diff --git a/data/evolution_graphics.s b/data/evolution_graphics.s
deleted file mode 100644
index 08276557a..000000000
--- a/data/evolution_graphics.s
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "constants/region_map.h"
-#include "constants/flags.h"
-#include "constants/moves.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gUnknown_841EE84:: @ 841EE84
- .incbin "baserom.gba", 0x41EE84, 0x40
-
-gUnknown_841EEC4:: @ 841EEC4
- .incbin "baserom.gba", 0x41EEC4, 0x10
-
-gUnknown_841EED4:: @ 841EED4
- .incbin "baserom.gba", 0x41EED4, 0x24
-
-gUnknown_841EEF8:: @ 841EEF8
- .incbin "baserom.gba", 0x41EEF8, 0x18
-
-gUnknown_841EF10:: @ 841EF10
- .incbin "baserom.gba", 0x41EF10, 0x2B8
diff --git a/data/evolution_scene.s b/data/evolution_scene.s
deleted file mode 100644
index 0bba4c18c..000000000
--- a/data/evolution_scene.s
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "constants/species.h"
-#include "constants/items.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gUnknown_83F6C90:: @ 83F6C90
- .incbin "baserom.gba", 0x3F6C90, 0x20
-
-gUnknown_83F6CB0:: @ 83F6CB0
- .incbin "baserom.gba", 0x3F6CB0, 0x6F8
-
-gUnknown_83F73A8:: @ 83F73A8
- .incbin "baserom.gba", 0x3F73A8, 0x4E4
-
-gUnknown_83F788C:: @ 83F788C
- .incbin "baserom.gba", 0x3F788C, 0x4D4
-
-gUnknown_83F7D60:: @ 83F7D60
- .incbin "baserom.gba", 0x3F7D60, 0x6A0
-
-gUnknown_83F8400:: @ 83F8400
- .incbin "baserom.gba", 0x3F8400, 0x40
-
-gUnknown_83F8440:: @ 83F8440
- .incbin "baserom.gba", 0x3F8440, 0x2D
-
-gUnknown_83F846D:: @ 83F846D
- .incbin "baserom.gba", 0x3F846D, 0x10
-
-gUnknown_83F847D:: @ 83F847D
- .incbin "baserom.gba", 0x3F847D, 0x323
diff --git a/data/field_ground_effect.s b/data/field_ground_effect.s
index 7979c7522..c871b2d4b 100644
--- a/data/field_ground_effect.s
+++ b/data/field_ground_effect.s
@@ -1,34 +1,63 @@
.section .rodata
.align 2
gUnknown_83A7024:: @ 83A7024
- .incbin "baserom.gba", 0x3A7024, 0x8
+ .4byte 0x00000020, 0x00000010
gUnknown_83A702C:: @ 83A702C
- .incbin "baserom.gba", 0x3A702C, 0x18
+ .4byte MetatileBehavior_IsTallGrass_2
+ .4byte MetatileBehavior_IsLongGrass
+ .4byte MetatileBehavior_IsPuddle
+ .4byte MetatileBehavior_IsSurfable
+ .4byte MetatileBehavior_IsWaterfallBottom
+ .4byte MetatileBehavior_UnusedReturnTrue
gUnknown_83A7044:: @ 83A7044
- .incbin "baserom.gba", 0x3A7044, 0x18
+ .4byte 0x00001000, 0x00002000, 0x00004000, 0x00008000, 0x00004000, 0x00010000
gUnknown_83A705C:: @ 83A705C
- .incbin "baserom.gba", 0x3A705C, 0x10
+ .4byte MetatileBehavior_IsJumpSouth
+ .4byte MetatileBehavior_IsJumpNorth
+ .4byte MetatileBehavior_IsJumpWest
+ .4byte MetatileBehavior_IsJumpEast
gUnknown_83A706C:: @ 83A706C
- .incbin "baserom.gba", 0x3A706C, 0x10
+ .byte 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73
gUnknown_83A707C:: @ 83A707C
- .incbin "baserom.gba", 0x3A707C, 0x10
+ .byte 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x02
gUnknown_83A708C:: @ 83A708C
- .incbin "baserom.gba", 0x3A708C, 0x10
+ .byte 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x01
gUnknown_83A709C:: @ 83A709C
- .incbin "baserom.gba", 0x3A709C, 0xC
+ .4byte nullsub_26
+ .4byte DoTracksGroundEffect_Footprints
+ .4byte DoTracksGroundEffect_BikeTireTracks
gUnknown_83A70A8:: @ 83A70A8
- .incbin "baserom.gba", 0x3A70A8, 0x4
+ .byte 0x0d, 0x00, 0x18, 0x00
gUnknown_83A70AC:: @ 83A70AC
- .incbin "baserom.gba", 0x3A70AC, 0x10
+ .byte 0x01, 0x02, 0x07, 0x08, 0x01, 0x02, 0x06, 0x05, 0x05, 0x08, 0x03, 0x04, 0x06, 0x07, 0x03, 0x04
gUnknown_83A70BC:: @ 83A70BC
- .incbin "baserom.gba", 0x3A70BC, 0xE0
+ .4byte GroundEffect_SpawnOnTallGrass
+ .4byte GroundEffect_StepOnTallGrass
+ .4byte GroundEffect_SpawnOnLongGrass
+ .4byte GroundEffect_StepOnLongGrass
+ .4byte GroundEffect_WaterReflection
+ .4byte GroundEffect_IceReflection
+ .4byte GroundEffect_FlowingWater
+ .4byte GroundEffect_SandTracks
+ .4byte GroundEffect_DeepSandTracks
+ .4byte GroundEffect_Ripple
+ .4byte GroundEffect_StepOnPuddle
+ .4byte GroundEffect_SandHeap
+ .4byte GroundEffect_JumpOnTallGrass
+ .4byte GroundEffect_JumpOnLongGrass
+ .4byte GroundEffect_JumpOnShallowWater
+ .4byte GroundEffect_JumpOnWater
+ .4byte GroundEffect_JumpLandingDust
+ .4byte GroundEffect_ShortGrass
+ .4byte GroundEffect_HotSprings
+ .4byte GroundEffect_Seaweed
diff --git a/data/field_map_obj.s b/data/field_map_obj.s
index e4fe9ceca..19f0fac9f 100644
--- a/data/field_map_obj.s
+++ b/data/field_map_obj.s
@@ -3,19 +3,24 @@
.section .rodata
.align 2
gUnknown_835B934:: @ 835B934
- .incbin "baserom.gba", 0x35B934, 0x10
+ .byte 0x01, 0x01, 0x06, 0x07, 0x08, 0x09, 0x06, 0x07, 0x08, 0x09, 0x0b, 0x0b, 0x00, 0x00, 0x00, 0x00
gUnknown_835B944:: @ 835B944
- .incbin "baserom.gba", 0x35B944, 0x18
+ spr_template 0, 65535, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, ObjectCB_CameraObject
gUnknown_835B95C:: @ 835B95C
- .incbin "baserom.gba", 0x35B95C, 0xC
+ .4byte CameraObject_0
+ .4byte CameraObject_1
+ .4byte CameraObject_2
gUnknown_835B968:: @ 835B968
.incbin "graphics/map_objects/0.gbapal"
gUnknown_835B988::
- .incbin "baserom.gba", 0x35B988, 0x1E0
+ .incbin "graphics/map_objects/unk_835B988.gbapal"
+
+gUnknown_835B9A0::
+ .space 0x1C0
gUnknown_835BB68:: @ 835BB68
.incbin "graphics/map_objects/000.4bpp"
diff --git a/data/fldeff_flash.s b/data/fldeff_flash.s
index 113cf42d1..ddffff5c1 100644
--- a/data/fldeff_flash.s
+++ b/data/fldeff_flash.s
@@ -6,22 +6,69 @@
.align 2
gUnknown_83F5738:: @ 83F5738
- .incbin "baserom.gba", 0x3F5738, 0xCC
+ .byte 1, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 2, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 3, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 5, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 6, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 7, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 8, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 9, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 4, 1, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 2, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 3, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 5, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 6, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 7, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 8, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 9, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 0, 0, 0, 0
+ .4byte NULL
+ .4byte NULL
gUnknown_83F5804:: @ 83F5804
- .incbin "baserom.gba", 0x3F5804, 0x20
+ .incbin "graphics/field_effects/flash_white.gbapal"
gUnknown_83F5824:: @ 83F5824
- .incbin "baserom.gba", 0x3F5824, 0x20
+ .incbin "graphics/field_effects/flash_black.gbapal"
gUnknown_83F5844:: @ 83F5844
- .incbin "baserom.gba", 0x3F5844, 0x10
-
-gUnknown_83F5854:: @ 83F5854
- .incbin "baserom.gba", 0x3F5854, 0x10
+ .incbin "graphics/field_effects/flash_gradient.gbapal"
gUnknown_83F5864:: @ 83F5864
- .incbin "baserom.gba", 0x3F5864, 0x1E0
+ .incbin "graphics/field_effects/flash_effect_map.bin.lz"
gUnknown_83F5A44:: @ 83F5A44
- .incbin "baserom.gba", 0x3F5A44, 0xB4
+ .incbin "graphics/field_effects/flash_effect_tiles.4bpp.lz"
diff --git a/data/map_obj_80688E4.s b/data/map_obj_80688E4.s
index 9010be906..884bf379f 100644
--- a/data/map_obj_80688E4.s
+++ b/data/map_obj_80688E4.s
@@ -1,25 +1,90 @@
.section .rodata
.align 2
+
+gUnknown_83A710C::
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+
+gUnknown_83A714C::
+ .4byte double_little_steps
+ .4byte double_little_steps
+ .4byte double_little_steps
+ .4byte double_little_steps
+ .4byte double_little_steps
+ .4byte double_little_steps
+ .4byte double_little_steps
+ .4byte double_little_steps
+
+gUnknown_83A716C::
+ .4byte double_little_steps
+ .4byte triple_little_steps
+ .4byte triple_little_steps
+ .4byte double_little_steps
+ .4byte triple_little_steps
+ .4byte triple_little_steps
+
+gUnknown_83A7184::
+ .4byte quad_little_steps
+ .4byte quad_little_steps
+ .4byte quad_little_steps
+ .4byte quad_little_steps
+
+gUnknown_83A7194::
+ .4byte oct_little_steps
+ .4byte oct_little_steps
+
gUnknown_83A719C:: @ 83A719C
- .incbin "baserom.gba", 0x3A719C, 0x14
+ .4byte gUnknown_83A710C
+ .4byte gUnknown_83A714C
+ .4byte gUnknown_83A716C
+ .4byte gUnknown_83A7184
+ .4byte gUnknown_83A7194
gUnknown_83A71B0:: @ 83A71B0
- .incbin "baserom.gba", 0x3A71B0, 0x3C
+ .2byte 0x0010, 0x0008, 0x0006, 0x0004, 0x0002
+
+gUnknown_83A71BA::
+ .byte 0xfc, 0xfa, 0xf8, 0xf6, 0xf5, 0xf4, 0xf4, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfc, 0x00, 0x00
+
+gUnknown_83A71CA::
+ .byte 0x00, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, 0x00, 0x00
+gUnknown_83A71DA::
+ .byte 0xfe, 0xfc, 0xfa, 0xf8, 0xf7, 0xf6, 0xf6, 0xf6, 0xf7, 0xf8, 0xfa, 0xfb, 0xfd, 0xfe, 0x00, 0x00
+
+ .align 2
gUnknown_83A71EC:: @ 83A71EC
- .incbin "baserom.gba", 0x3A71EC, 0xC
+ .4byte gUnknown_83A71BA
+ .4byte gUnknown_83A71CA
+ .4byte gUnknown_83A71DA
+ .align 1
gUnknown_83A71F8:: @ 83A71F8
- .incbin "baserom.gba", 0x3A71F8, 0x6
+ .2byte 0x10, 0x10, 0x20
gUnknown_83A71FE:: @ 83A71FE
- .incbin "baserom.gba", 0x3A71FE, 0x4
+ .byte 0, 0, 1
+ .align 1
gUnknown_83A7202:: @ 83A7202
- .incbin "baserom.gba", 0x3A7202, 0x6
+ .2byte 0x20, 0x20, 0x40
gUnknown_83A7208:: @ 83A7208
- .incbin "baserom.gba", 0x3A7208, 0x4
+ .byte 1, 1, 2
.align 2
gUnknown_83A720C:: @ 83A720C
diff --git a/data/smokescreen.s b/data/smokescreen.s
index 17d611d3c..19dceec00 100644
--- a/data/smokescreen.s
+++ b/data/smokescreen.s
@@ -1,17 +1,55 @@
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
.section .rodata
- .balign 4
+ .align 2
gUnknown_825098C:: @ 825098C
- .incbin "baserom.gba", 0x25098C, 0x8
+ obj_tiles gFile_graphics_battle_anims_sprites_smokescreen_impact_sheet, 0x0180, 55019
gUnknown_8250994:: @ 8250994
- .incbin "baserom.gba", 0x250994, 0x60
+ obj_pal gFile_graphics_battle_anims_sprites_smokescreen_impact_palette, 55019
+
+gOamData_835099C::
+ .4byte 0x40000000, 0x00000400
+
+gAnimCmd_82509A4::
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 4, 4
+ obj_image_anim_frame 8, 4
+ obj_image_anim_end
+
+gAnimCmd_82509B4::
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gAnimCmd_82509C4::
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+
+gAnimCmd_82509D4::
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+
+gSpriteAnimTable_82509E4::
+ .4byte gAnimCmd_82509A4
+ .4byte gAnimCmd_82509B4
+ .4byte gAnimCmd_82509C4
+ .4byte gAnimCmd_82509D4
gUnknown_82509F4:: @ 82509F4
- .incbin "baserom.gba", 0x2509F4, 0x18
+ spr_template 55019, 55019, gOamData_835099C, gSpriteAnimTable_82509E4, NULL, gDummySpriteAffineAnimTable, sub_804A904
gSpriteSheet_EnemyShadow:: @ 8250A0C
- .incbin "baserom.gba", 0x250A0C, 0x10
+ obj_tiles gFile_graphics_battle_interface_enemy_mon_shadow_sheet, 0x0080, 55129
+
+gOamData_8250A14::
+ .4byte 0x40004000, 0x00000c00
gSpriteTemplate_EnemyShadow:: @ 8250A1C
- .incbin "baserom.gba", 0x250A1C, 0x18
+ spr_template 55129, 55039, gOamData_8250A14, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_SetInvisible
diff --git a/data/strings.s b/data/strings.s
index a75671090..a1892e209 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -2904,7 +2904,7 @@ gUnknown_8419D89:: @ 8419D89
.string "Waiting for the other TRAINER to\n"
.string "finish reading your TRAINER CARD.$"
-gText_MenuOptionOption:: @ 8419DCC
+gText_MenuOption:: @ 8419DCC
.string "OPTION$"
gText_TextSpeed:: @ 0x8419DD3
@@ -2955,16 +2955,16 @@ gText_SoundMono:: @ 0x8419E36
gText_SoundStereo:: @ 0x8419E3B
.string "STEREO$"
-gUnknown_8419E42:: @ 0x8419E42
+gTextJP_Type:: @ 0x8419E42
.string "タイプ$"
-gText_ButtonTypeNormal:: @ 0x8419E46
+gText_ButtonTypeHelp:: @ 0x8419E46
.string "HELP$"
-gText_ButtonTypeLR:: @ 0x8419E4B
- .string "Lã‚…A$"
+gText_ButtonTypeLEqualsA:: @ 0x8419E4B
+ .string "L=A$"
-gText_ButtonTypeLEqualsA:: @ 0x8419E4F
+gText_ButtonTypeLR:: @ 0x8419E4F
.string "LR$"
gText_FrameType:: @ 8419E52
@@ -4517,7 +4517,7 @@ gUnknown_841E2F5:: @ 841E2F5
gUnknown_841E322:: @ 841E322
.string "{ID}$"
-gUnknown_841E325:: @ 841E325
+gText_CommunicationStandby5:: @ 841E325
.string "Communication standby…$"
gDaycareText_GetAlongVeryWell:: @ 841E33C
diff --git a/data/tileset_anims.s b/data/tileset_anims.s
deleted file mode 100644
index 5f2320fd3..000000000
--- a/data/tileset_anims.s
+++ /dev/null
@@ -1,28 +0,0 @@
- .section .rodata
- .align 2
-gUnknown_83A73E0:: @ 83A73E0
- .incbin "baserom.gba", 0x3A73E0, 0x280
-
-gUnknown_83A7660:: @ 83A7660
- .incbin "baserom.gba", 0x3A7660, 0x2FF4
-
-gUnknown_83AA654:: @ 83AA654
- .incbin "baserom.gba", 0x3AA654, 0x1220
-
-gUnknown_83AB874:: @ 83AB874
- .incbin "baserom.gba", 0x3AB874, 0x540
-
-gUnknown_83ABDB4:: @ 83ABDB4
- .incbin "baserom.gba", 0x3ABDB4, 0x434
-
-gUnknown_83AC1E8:: @ 83AC1E8
- .incbin "baserom.gba", 0x3AC1E8, 0x410
-
-gUnknown_83AC5F8:: @ 83AC5F8
- .incbin "baserom.gba", 0x3AC5F8, 0x1D0
-
-gUnknown_83AC7C8:: @ 83AC7C8
- .incbin "baserom.gba", 0x3AC7C8, 0x188
-
-gUnknown_83AC950:: @ 83AC950
- .incbin "baserom.gba", 0x3AC950, 0x10
diff --git a/graphics/battle_anims/unk_83E4874.bin b/graphics/battle_anims/unk_83E4874.bin
new file mode 100644
index 000000000..dc2990b0a
--- /dev/null
+++ b/graphics/battle_anims/unk_83E4874.bin
Binary files differ
diff --git a/graphics/battle_anims/unk_83E4874.png b/graphics/battle_anims/unk_83E4874.png
new file mode 100644
index 000000000..c4a27b929
--- /dev/null
+++ b/graphics/battle_anims/unk_83E4874.png
Binary files differ
diff --git a/graphics/evolution_scene/bg.bin b/graphics/evolution_scene/bg.bin
new file mode 100644
index 000000000..583ebac2b
--- /dev/null
+++ b/graphics/evolution_scene/bg.bin
Binary files differ
diff --git a/graphics/evolution_scene/bg.png b/graphics/evolution_scene/bg.png
new file mode 100644
index 000000000..c9e84c58e
--- /dev/null
+++ b/graphics/evolution_scene/bg.png
Binary files differ
diff --git a/graphics/evolution_scene/bg2.bin b/graphics/evolution_scene/bg2.bin
new file mode 100644
index 000000000..7afab112a
--- /dev/null
+++ b/graphics/evolution_scene/bg2.bin
Binary files differ
diff --git a/graphics/evolution_scene/gray_transition_intro.pal b/graphics/evolution_scene/gray_transition_intro.pal
new file mode 100644
index 000000000..4b0812f09
--- /dev/null
+++ b/graphics/evolution_scene/gray_transition_intro.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/evolution_scene/transition.pal b/graphics/evolution_scene/transition.pal
new file mode 100644
index 000000000..b0f4d3815
--- /dev/null
+++ b/graphics/evolution_scene/transition.pal
@@ -0,0 +1,35 @@
+JASC-PAL
+0100
+32
+0 0 0
+16 16 16
+24 32 32
+41 49 49
+49 65 74
+65 82 90
+74 98 115
+90 115 131
+106 131 148
+115 148 172
+131 164 189
+139 180 213
+156 197 230
+172 213 255
+0 0 0
+0 0 0
+0 0 0
+65 90 106
+74 98 115
+82 106 131
+90 115 139
+98 131 156
+106 139 164
+115 148 180
+123 156 189
+131 172 205
+139 180 213
+148 189 230
+156 197 238
+172 213 255
+0 0 0
+0 0 0
diff --git a/graphics/evolution_scene/unknown_5B4114.pal b/graphics/evolution_scene/unknown_5B4114.pal
new file mode 100644
index 000000000..2cd4981fd
--- /dev/null
+++ b/graphics/evolution_scene/unknown_5B4114.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+90 90 90
+98 106 106
+115 123 123
+131 131 131
+148 148 148
+156 164 164
+172 172 172
+189 189 189
+197 205 205
+213 213 213
+230 230 230
+246 246 246
+255 255 255
+0 0 0
+0 0 0
diff --git a/graphics/evolution_scene/unref_83F7D80.bin b/graphics/evolution_scene/unref_83F7D80.bin
new file mode 100644
index 000000000..b2b300184
--- /dev/null
+++ b/graphics/evolution_scene/unref_83F7D80.bin
Binary files differ
diff --git a/graphics/field_effects/flash_black.pal b/graphics/field_effects/flash_black.pal
new file mode 100644
index 000000000..4b0812f09
--- /dev/null
+++ b/graphics/field_effects/flash_black.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/field_effects/flash_effect_map.bin b/graphics/field_effects/flash_effect_map.bin
new file mode 100644
index 000000000..4293bfd1c
--- /dev/null
+++ b/graphics/field_effects/flash_effect_map.bin
Binary files differ
diff --git a/graphics/field_effects/flash_effect_tiles.png b/graphics/field_effects/flash_effect_tiles.png
new file mode 100644
index 000000000..4079a5a84
--- /dev/null
+++ b/graphics/field_effects/flash_effect_tiles.png
Binary files differ
diff --git a/graphics/field_effects/flash_gradient.pal b/graphics/field_effects/flash_gradient.pal
new file mode 100644
index 000000000..ec7a2b50e
--- /dev/null
+++ b/graphics/field_effects/flash_gradient.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+148 197 172
+16 16 16
+32 32 32
+49 49 49
+65 65 65
+82 82 82
+98 98 98
+115 115 115
+131 131 131
+148 148 148
+164 164 164
+180 180 180
+197 197 197
+213 213 213
+230 230 230
+255 255 255
diff --git a/graphics/field_effects/flash_white.pal b/graphics/field_effects/flash_white.pal
new file mode 100644
index 000000000..98a1fb3c8
--- /dev/null
+++ b/graphics/field_effects/flash_white.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
diff --git a/graphics/map_objects/unk_835B988.pal b/graphics/map_objects/unk_835B988.pal
new file mode 100644
index 000000000..27436be92
--- /dev/null
+++ b/graphics/map_objects/unk_835B988.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+115 197 164
+172 123 65
+255 197 148
+222 148 115
+123 65 65
+65 65 213
+57 57 123
+115 164 197
+106 41 41
+238 238 255
+180 180 213
+255 106 74
+197 57 57
+255 222 90
+189 156 57
+0 0 0
diff --git a/graphics/misc/evolution_sprite_841EEA4.png b/graphics/misc/evolution_sprite_841EEA4.png
new file mode 100644
index 000000000..c942e5b4f
--- /dev/null
+++ b/graphics/misc/evolution_sprite_841EEA4.png
Binary files differ
diff --git a/graphics/tileset_anims/anim_0_0.bin b/graphics/tileset_anims/anim_0_0.bin
new file mode 100644
index 000000000..38ac085bd
--- /dev/null
+++ b/graphics/tileset_anims/anim_0_0.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_0_1.bin b/graphics/tileset_anims/anim_0_1.bin
new file mode 100644
index 000000000..286411540
--- /dev/null
+++ b/graphics/tileset_anims/anim_0_1.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_0_2.bin b/graphics/tileset_anims/anim_0_2.bin
new file mode 100644
index 000000000..8bfe63cd2
--- /dev/null
+++ b/graphics/tileset_anims/anim_0_2.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_0_3.bin b/graphics/tileset_anims/anim_0_3.bin
new file mode 100644
index 000000000..13522349b
--- /dev/null
+++ b/graphics/tileset_anims/anim_0_3.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_0_4.bin b/graphics/tileset_anims/anim_0_4.bin
new file mode 100644
index 000000000..8ef77c561
--- /dev/null
+++ b/graphics/tileset_anims/anim_0_4.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_1_0.bin b/graphics/tileset_anims/anim_1_0.bin
new file mode 100644
index 000000000..fb05bd03c
--- /dev/null
+++ b/graphics/tileset_anims/anim_1_0.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_1_1.bin b/graphics/tileset_anims/anim_1_1.bin
new file mode 100644
index 000000000..d67987eca
--- /dev/null
+++ b/graphics/tileset_anims/anim_1_1.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_1_2.bin b/graphics/tileset_anims/anim_1_2.bin
new file mode 100644
index 000000000..813f93914
--- /dev/null
+++ b/graphics/tileset_anims/anim_1_2.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_1_3.bin b/graphics/tileset_anims/anim_1_3.bin
new file mode 100644
index 000000000..df560357c
--- /dev/null
+++ b/graphics/tileset_anims/anim_1_3.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_1_4.bin b/graphics/tileset_anims/anim_1_4.bin
new file mode 100644
index 000000000..d5d005d28
--- /dev/null
+++ b/graphics/tileset_anims/anim_1_4.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_1_5.bin b/graphics/tileset_anims/anim_1_5.bin
new file mode 100644
index 000000000..4e5e0e247
--- /dev/null
+++ b/graphics/tileset_anims/anim_1_5.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_1_6.bin b/graphics/tileset_anims/anim_1_6.bin
new file mode 100644
index 000000000..bb716829f
--- /dev/null
+++ b/graphics/tileset_anims/anim_1_6.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_1_7.bin b/graphics/tileset_anims/anim_1_7.bin
new file mode 100644
index 000000000..c49e57e7f
--- /dev/null
+++ b/graphics/tileset_anims/anim_1_7.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_2_0.bin b/graphics/tileset_anims/anim_2_0.bin
new file mode 100644
index 000000000..e9225fe58
--- /dev/null
+++ b/graphics/tileset_anims/anim_2_0.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_2_1.bin b/graphics/tileset_anims/anim_2_1.bin
new file mode 100644
index 000000000..74424fff9
--- /dev/null
+++ b/graphics/tileset_anims/anim_2_1.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_2_2.bin b/graphics/tileset_anims/anim_2_2.bin
new file mode 100644
index 000000000..7b2e609c3
--- /dev/null
+++ b/graphics/tileset_anims/anim_2_2.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_2_3.bin b/graphics/tileset_anims/anim_2_3.bin
new file mode 100644
index 000000000..85db3d2df
--- /dev/null
+++ b/graphics/tileset_anims/anim_2_3.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_2_4.bin b/graphics/tileset_anims/anim_2_4.bin
new file mode 100644
index 000000000..c350f70ec
--- /dev/null
+++ b/graphics/tileset_anims/anim_2_4.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_2_5.bin b/graphics/tileset_anims/anim_2_5.bin
new file mode 100644
index 000000000..71636ac22
--- /dev/null
+++ b/graphics/tileset_anims/anim_2_5.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_2_6.bin b/graphics/tileset_anims/anim_2_6.bin
new file mode 100644
index 000000000..79e125e62
--- /dev/null
+++ b/graphics/tileset_anims/anim_2_6.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_2_7.bin b/graphics/tileset_anims/anim_2_7.bin
new file mode 100644
index 000000000..1df096dbc
--- /dev/null
+++ b/graphics/tileset_anims/anim_2_7.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_3_0.bin b/graphics/tileset_anims/anim_3_0.bin
new file mode 100644
index 000000000..6a911444b
--- /dev/null
+++ b/graphics/tileset_anims/anim_3_0.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_3_1.bin b/graphics/tileset_anims/anim_3_1.bin
new file mode 100644
index 000000000..a66f3382d
--- /dev/null
+++ b/graphics/tileset_anims/anim_3_1.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_3_2.bin b/graphics/tileset_anims/anim_3_2.bin
new file mode 100644
index 000000000..ed7890e83
--- /dev/null
+++ b/graphics/tileset_anims/anim_3_2.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_3_3.bin b/graphics/tileset_anims/anim_3_3.bin
new file mode 100644
index 000000000..5cfdc3ebd
--- /dev/null
+++ b/graphics/tileset_anims/anim_3_3.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_3_4.bin b/graphics/tileset_anims/anim_3_4.bin
new file mode 100644
index 000000000..83dc605ff
--- /dev/null
+++ b/graphics/tileset_anims/anim_3_4.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_4_0.bin b/graphics/tileset_anims/anim_4_0.bin
new file mode 100644
index 000000000..462cf8168
--- /dev/null
+++ b/graphics/tileset_anims/anim_4_0.bin
@@ -0,0 +1 @@
+îîîîîïîîïîîîÝݽûÝýú¿Ý­ÿ»ýú¿Ï­ÿ¿Ïîîîîîîîþîîþî¿ÛÝÝû¯ßÝ»ÿÚÝüû¯ßüûÿÚ­ÿÿ»ºÿÿÿµûÿÿ¥ûÿ»ª»»ª]ª«ZÝ]ªºÝ½Uû»ÿÿÚÿÿÿ«ÿÿ¿[»ÿ¿Zª»»ª¥ºªÕ«ªÕÝ¿UÛÝ­ý»ÿݽÿÿÚ½¿ûݽ»»Ýý»¿ÝýÿÿÝýÿÿݽÿÿÿ»ß­ÿÿÛÝ¿ûÛÚ»»ÛÝû»ßÝÿÿßÝÿÿßÝÿÿÛÝݽ¿ûݽ»»ýý»¿ýÝÿÿÝßýÿÝÝÝÝÝÝýÿÝÝÝÝ¿ûÛÝ»»ÛÝû»ßßÿÿÝßÿßýÝÝÝÝÝÿßÝÝÝÝÝÝ \ No newline at end of file
diff --git a/graphics/tileset_anims/anim_4_1.bin b/graphics/tileset_anims/anim_4_1.bin
new file mode 100644
index 000000000..eeccebb35
--- /dev/null
+++ b/graphics/tileset_anims/anim_4_1.bin
@@ -0,0 +1 @@
+îîîîîîîîîîî»ýÝ»¿Ýªÿ»­û¿ÿ­ÿûÏýÿûÏîîîîîîîî»îîîû»Ýß»ÿªÝÿû¿Úü¿ÿÚü¿ÿßúÿ¿ÿºÿÿ»µûÿÿ]ûÿ»]»»ªÝUµªÚº¯ªÝ½ÿ[ÿûÿ¯»ÿÿ«ÿÿ¿[»ÿ¿Õª»»Õª[Uݪú«­µÿÛÝݽ¿ûݺ»»Ýý»¿ÝýÿÿÝýÿÿݽÿÿݽ¿ûݽ»»¿û«Ý»»ÛÝû»ßÝÿÿßÝÿÿß­ÿÿÛÝ¿ûÛÝ»»ÛÝÝý»¿ÝýÿÿßýÿÿßÝÿÿýÝýÿÝÝÝÝÝýÝÝÝÝÿÿû»ßÝÿÿßÝÿÿßýÿÿÝýÿßÝßÝÝÝÝÝÝßÝÿÿÝÝ \ No newline at end of file
diff --git a/graphics/tileset_anims/anim_4_2.bin b/graphics/tileset_anims/anim_4_2.bin
new file mode 100644
index 000000000..3808d0b82
--- /dev/null
+++ b/graphics/tileset_anims/anim_4_2.bin
@@ -0,0 +1 @@
+îîîîîï¾ûïþú¿Ý­ÿÿýúÿÏ­¿ÿÏ­¿ÿÿ½ÿûÿîîîî¿ëþîû¯ïþÿÿÚÝüÿ¯ßüÿûÚÿÿûÚÿ¿ÿ«ºû¿»¥ûÿ»¥»»ªZª«ZÝ]ªºÝ½U»Ý½ÿ»Ý½»»»û¿[»ÿ¿Zª»»ª¥ºªÕ«ªÕÝ»UÛÝ¿ûÛÝ»»ÛÝ­ý»¿ÝýÿÿÚýÿÿÝýÿÿݽÿÿݽ¿ûݽ»»Ýý»¿û»ß­ÿÿßÝÿÿßÚÿÿßÝÿÿÛÝ¿ûÛÝ»»ÛÝû»ßÝÝýÿÿÝýÿÿݽÿÿÝÝ»ûÝݽ»ÝÝÝÝÝÝÝÝÝÝÝÝÿÿßÝÿÿßÝÿÿÛÝ¿»ÝÝ»ÛÝÝÝÝÝÝÝÝÝÝÝÝÝÝ \ No newline at end of file
diff --git a/graphics/tileset_anims/anim_4_3.bin b/graphics/tileset_anims/anim_4_3.bin
new file mode 100644
index 000000000..45374b4aa
--- /dev/null
+++ b/graphics/tileset_anims/anim_4_3.bin
@@ -0,0 +1 @@
+îîîîîîîîîîî»ýÝ»¿Ýªÿ»­û¿ÿ­ÿûÏýÿûÏîîîîîîîî»îîîû»Ýß»ÿªÝÿû¿Úü¿ÿÚü¿ÿßúÿ¿ÿºÿÿ»µûÿÿ]ûÿ»]»»ªÝUµªÚº¯ªÝ½ÿ[ÿûÿ¯»ÿÿ«ÿÿ¿[»ÿ¿Õª»»Õª[Uݪú«­µÿÛÝÝýÿÿÝúÿÿݽÿÿݽ¿ûݽ»»Ýý»¿ÝýÿÿÝýÿÿÿÿ¯ÝÿÿßÝÿÿÛÝ¿ûÛ­»»ÛÝû»ßÝÿÿßÝÿÿßÝݽÿÿݽ¿ûݽ»»ÝÝ»¿ÝÝýÿÝÝÝÝÝÝÝÝÝÝÝÝÿÿÛÝ¿ûÛÝ»»ÛÝû»ÝÝÿßÝÝÝÝÝÝÝÝÝÝÝÝÝÝ \ No newline at end of file
diff --git a/graphics/tileset_anims/anim_5_0.bin b/graphics/tileset_anims/anim_5_0.bin
new file mode 100644
index 000000000..face13a75
--- /dev/null
+++ b/graphics/tileset_anims/anim_5_0.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_5_1.bin b/graphics/tileset_anims/anim_5_1.bin
new file mode 100644
index 000000000..f1a93897e
--- /dev/null
+++ b/graphics/tileset_anims/anim_5_1.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_5_2.bin b/graphics/tileset_anims/anim_5_2.bin
new file mode 100644
index 000000000..d63cdc5fc
--- /dev/null
+++ b/graphics/tileset_anims/anim_5_2.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_5_3.bin b/graphics/tileset_anims/anim_5_3.bin
new file mode 100644
index 000000000..0c396ccbe
--- /dev/null
+++ b/graphics/tileset_anims/anim_5_3.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_6_0.bin b/graphics/tileset_anims/anim_6_0.bin
new file mode 100644
index 000000000..8bdac939e
--- /dev/null
+++ b/graphics/tileset_anims/anim_6_0.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_6_1.bin b/graphics/tileset_anims/anim_6_1.bin
new file mode 100644
index 000000000..cd2e32723
--- /dev/null
+++ b/graphics/tileset_anims/anim_6_1.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_7_0.bin b/graphics/tileset_anims/anim_7_0.bin
new file mode 100644
index 000000000..f94617c73
--- /dev/null
+++ b/graphics/tileset_anims/anim_7_0.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_7_1.bin b/graphics/tileset_anims/anim_7_1.bin
new file mode 100644
index 000000000..ac59368ca
--- /dev/null
+++ b/graphics/tileset_anims/anim_7_1.bin
Binary files differ
diff --git a/graphics/tileset_anims/anim_7_2.bin b/graphics/tileset_anims/anim_7_2.bin
new file mode 100644
index 000000000..9dd915040
--- /dev/null
+++ b/graphics/tileset_anims/anim_7_2.bin
Binary files differ
diff --git a/graphics/unknown/unk_841EF48.png b/graphics/unknown/unk_841EF48.png
new file mode 100644
index 000000000..a61833c0a
--- /dev/null
+++ b/graphics/unknown/unk_841EF48.png
Binary files differ
diff --git a/include/battle_bg.h b/include/battle_bg.h
index 29571b410..61c106b64 100644
--- a/include/battle_bg.h
+++ b/include/battle_bg.h
@@ -5,7 +5,7 @@
extern const struct BgTemplate gBattleBgTemplates[];
-void sub_800F34C(void);
+void InitBattleBgsVideo(void);
void DrawBattleEntryBackground(void);
void sub_800F6FC(u8 taskId);
void LoadBattleMenuWindowGfx(void);
diff --git a/include/battle_main.h b/include/battle_main.h
index 613171da9..fe585f0e6 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -69,7 +69,7 @@ void VBlankCB_Battle(void);
void nullsub_9(struct Sprite *sprite);
void sub_801182C(struct Sprite *sprite);
void sub_8011A1C(void);
-u32 sub_8011C44(u8 arrayId, u8 caseId);
+u32 GetBattleBgAttribute(u8 arrayId, u8 caseId);
void SpriteCB_WildMon(struct Sprite *sprite);
void SpriteCallbackDummy2(struct Sprite *sprite);
void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index 6942fee83..a2ad90776 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -83,4 +83,8 @@
// Shiny odds
#define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536
+// Learning moves
+#define MON_ALREADY_KNOWS_MOVE 0xFFFE
+#define MON_HAS_MAX_MOVES 0xFFFF
+
#endif // GUARD_CONSTANTS_POKEMON_H
diff --git a/include/dynamic_placeholder_text_util.h b/include/dynamic_placeholder_text_util.h
index 31cfe8d30..bae92eb01 100644
--- a/include/dynamic_placeholder_text_util.h
+++ b/include/dynamic_placeholder_text_util.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_UNK_TEXT_UTIL_H
-#define GUARD_UNK_TEXT_UTIL_H
+#ifndef GUARD_DYNAMIC_PLACEHOLDER_TEXT_UTIL_H
+#define GUARD_DYNAMIC_PLACEHOLDER_TEXT_UTIL_H
#include "global.h"
@@ -9,4 +9,4 @@ u8 *DynamicPlaceholderTextUtil_ExpandPlaceholders(u8 *dest, const u8 *src);
const u8 *DynamicPlaceholderTextUtil_GetPlaceholderPtr(u8 idx);
u8 GetColorFromTextColorTable(u16 graphicId);
-#endif //GUARD_UNK_TEXT_UTIL_H
+#endif //GUARD_DYNAMIC_PLACEHOLDER_TEXT_UTIL_H
diff --git a/include/evolution_graphics.h b/include/evolution_graphics.h
index 21f133872..e4fbf0fc0 100644
--- a/include/evolution_graphics.h
+++ b/include/evolution_graphics.h
@@ -10,7 +10,7 @@ u8 LaunchTask_PreEvoSparklesSet2(void);
u8 LaunchTask_PostEvoSparklesSet1(void);
u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species);
u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species);
-u8 sub_817C3A0(u8 preEvoSpriteID, u8 postEvoSpriteID);
+u8 LaunchTask_PrePostEvoMonSprites(u8 preEvoSpriteId, u8 postEvoSpriteId);
#define EvoGraphicsTaskEvoStop data[8]
diff --git a/include/evolution_scene.h b/include/evolution_scene.h
index 6ceed99c1..3f504a1f1 100644
--- a/include/evolution_scene.h
+++ b/include/evolution_scene.h
@@ -3,10 +3,11 @@
#include "global.h"
-void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyID);
-void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyID);
-void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID);
-
extern void (*gCB2_AfterEvolution)(void);
+void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyId);
+void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyId);
+void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteId, u8 partyId);
+void IsMovingBackgroundTaskRunning(void);
+
#endif // GUARD_EVOLUTION_SCENE_H
diff --git a/include/menu_helpers.h b/include/menu_helpers.h
index 6ea771500..8d042825c 100644
--- a/include/menu_helpers.h
+++ b/include/menu_helpers.h
@@ -12,7 +12,7 @@ struct YesNoFuncTable
};
bool16 RunTextPrinters_CheckActive(u8 textPrinterId);
-bool8 sub_80BF72C(void);
+bool32 sub_80BF72C(void);
bool8 sub_80BF748(void);
bool8 MenuHelpers_LinkSomething(void);
void SetVBlankHBlankCallbacksToNull(void);
diff --git a/include/pokemon.h b/include/pokemon.h
index 3d0faca36..c5ad89f41 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -14,7 +14,7 @@
#define MON_DATA_OT_NAME 7
#define MON_DATA_MARKINGS 8
#define MON_DATA_CHECKSUM 9
-#define MON_DATA_10 10
+#define MON_DATA_ENCRYPT_SEPARATOR 10
#define MON_DATA_SPECIES 11
#define MON_DATA_HELD_ITEM 12
#define MON_DATA_MOVE1 13
diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h
index b800e3d30..2655405e5 100644
--- a/include/pokemon_summary_screen.h
+++ b/include/pokemon_summary_screen.h
@@ -10,7 +10,7 @@ extern const u8 *const gNatureNamePointers[];
void ShowSelectMovePokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u16);
void ShowPokemonSummaryScreenSet40EF(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void));
-u8 sub_8138B2C(void);
+u8 GetMoveSlotToReplace(void);
void SummaryScreen_SetUnknownTaskId(u8 a0);
void SummaryScreen_DestroyUnknownTask(void);
diff --git a/include/sprite.h b/include/sprite.h
index 85722311f..7432306a4 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -253,6 +253,7 @@ extern s16 gSpriteCoordOffsetY;
extern const struct SpriteTemplate gDummySpriteTemplate;
extern struct Sprite gSprites[];
extern struct OamMatrix gOamMatrices[];
+extern bool8 gAffineAnimsDisabled;
void ResetSpriteData(void);
void AnimateSprites(void);
diff --git a/include/strings.h b/include/strings.h
index 89149a8eb..7750b271c 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -688,7 +688,7 @@ extern const u8 gText_XWillBeSentToY[];
extern const u8 gText_ByeByeVar1[];
extern const u8 gText_XSentOverY[];
extern const u8 gText_TakeGoodCareOfX[];
-extern const u8 gUnknown_841E325[];
+extern const u8 gText_CommunicationStandby5[];
extern const u8 gTradeText_Cancel[];
extern const u8 gTradeText_ChooseAPokemon[];
extern const u8 gTradeText_Summary[];
@@ -780,11 +780,18 @@ extern const u8 gText_BattleStyleShift[];
extern const u8 gText_BattleStyleSet[];
extern const u8 gText_SoundMono[];
extern const u8 gText_SoundStereo[];
-extern const u8 gText_ButtonTypeNormal[];
+extern const u8 gText_ButtonTypeHelp[];
extern const u8 gText_ButtonTypeLR[];
extern const u8 gText_ButtonTypeLEqualsA[];
-extern const u8 gText_MenuOptionOption[];
+extern const u8 gText_MenuOption[];
extern const u8 gText_FrameType[];
+extern const u8 gTextJP_Type[];
extern const u8 gText_PickSwitchCancel[];
+// evolution_scene
+extern const u8 gText_PkmnIsEvolving[];
+extern const u8 gText_CongratsPkmnEvolved[];
+extern const u8 gText_EllipsisQuestionMark[];
+extern const u8 gText_PkmnStoppedEvolving[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/trade_scene.h b/include/trade_scene.h
index 13cb1a56c..52e80e418 100644
--- a/include/trade_scene.h
+++ b/include/trade_scene.h
@@ -7,11 +7,11 @@ void DoInGameTradeScene(void);
void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed);
u16 GetInGameTradeSpeciesInfo(void);
u16 GetTradeSpecies(void);
-void sub_805049C(void);
-void sub_80504B0(void);
+void InitTradeSequenceBgGpuRegs(void);
+void LinkTradeDrawWindow(void);
void LoadTradeAnimGfx(void);
extern const u16 gUnknown_826601C[];
-extern const struct WindowTemplate gUnknown_826D1CC;
+extern const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate;
#endif //GUARD_TRADE_SCENE_H
diff --git a/ld_script.txt b/ld_script.txt
index b3a64df47..4d2ec3326 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -191,7 +191,7 @@ SECTIONS {
src/hof_pc.o(.text);
src/field_specials.o(.text);
src/battle_records.o(.text);
- asm/evolution_scene.o(.text);
+ src/evolution_scene.o(.text);
src/coins.o(.text);
src/fldeff_strength.o(.text);
src/battle_transition.o(.text);
@@ -219,7 +219,7 @@ SECTIONS {
src/diploma.o(.text);
asm/save_failed_screen.o(.text);
asm/clear_save_data_screen.o(.text);
- asm/evolution_graphics.o(.text);
+ src/evolution_graphics.o(.text);
src/fldeff_teleport.o(.text);
src/new_menu_helpers.o(.text);
asm/box_party_pokemon_dropdown.o(.text);
@@ -418,7 +418,7 @@ SECTIONS {
src/coord_event_weather.o(.rodata);
data/field_tasks.o(.rodata);
src/start_menu.o(.rodata);
- data/tileset_anims.o(.rodata);
+ src/tileset_anims.o(.rodata);
src/palette.o(.rodata);
src/sound.o(.rodata);
data/battle_anim.o(.rodata);
@@ -476,7 +476,7 @@ SECTIONS {
data/fldeff_flash.o(.rodata);
src/field_specials.o(.rodata);
src/battle_records.o(.rodata);
- data/evolution_scene.o(.rodata);
+ src/evolution_scene.o(.rodata);
src/battle_transition.o(.rodata);
src/battle_controller_link_partner.o(.rodata);
data/battle_message.o(.rodata);
@@ -496,7 +496,7 @@ SECTIONS {
data/strings.o(.rodata);
data/save_failed_screen.o(.rodata);
data/clear_save_data_screen.o(.rodata);
- data/evolution_graphics.o(.rodata);
+ src/evolution_graphics.o(.rodata);
src/new_menu_helpers.o(.rodata);
data/box_party_pokemon_dropdown.o(.rodata);
src/map_preview_screen.o(.rodata);
diff --git a/src/battle_main.c b/src/battle_main.c
index 14b191e52..1125a8d2d 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -696,7 +696,7 @@ static void CB2_InitBattleInternal(void)
gBattle_BG3_X = 0;
gBattle_BG3_Y = 0;
gBattleTerrain = BattleSetup_GetTerrainId();
- sub_800F34C();
+ InitBattleBgsVideo();
LoadBattleTextboxAndBackground();
ResetSpriteData();
ResetTasks();
@@ -1774,7 +1774,7 @@ void sub_8011A1C(void)
gBattle_BG2_Y = 0;
gBattle_BG3_X = 0;
gBattle_BG3_Y = 0;
- sub_800F34C();
+ InitBattleBgsVideo();
LoadCompressedPalette(gBattleTextboxPalette, 0, 64);
LoadBattleMenuWindowGfx();
ResetSpriteData();
@@ -1835,7 +1835,7 @@ static void sub_8011BB0(void)
}
}
-u32 sub_8011C44(u8 arrayId, u8 caseId)
+u32 GetBattleBgAttribute(u8 arrayId, u8 caseId)
{
u32 ret = 0;
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index c5c8e89a4..8a0e32ba8 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -5045,7 +5045,7 @@ static void atk5A_yesnoboxlearnmove(void)
case 3:
if (!gPaletteFade.active && gMain.callback2 == BattleMainCB2)
{
- u8 movePosition = sub_8138B2C();
+ u8 movePosition = GetMoveSlotToReplace();
if (movePosition == 4)
{
@@ -9629,7 +9629,7 @@ static void atkF2_displaydexinfo(void)
}
break;
case 3:
- sub_800F34C();
+ InitBattleBgsVideo();
LoadBattleTextboxAndBackground();
gBattle_BG3_X = 0x100;
++gBattleCommunication[0];
diff --git a/src/berry_pouch.c b/src/berry_pouch.c
index f6b976ba3..b8b66c0bc 100644
--- a/src/berry_pouch.c
+++ b/src/berry_pouch.c
@@ -457,7 +457,7 @@ static void CB2_InitBerryPouch(void)
{
while (1)
{
- if (sub_80BF72C() == TRUE)
+ if ((u8)sub_80BF72C() == TRUE)
break;
if (RunBerryPouchInit() == TRUE)
break;
@@ -934,7 +934,7 @@ static void Task_BerryPouchMain(u8 taskId)
{
s16 * data = gTasks[taskId].data;
s32 menuInput;
- if (!gPaletteFade.active && sub_80BF72C() != TRUE)
+ if (!gPaletteFade.active && (u8)sub_80BF72C() != TRUE)
{
menuInput = ListMenu_ProcessInput(data[0]);
ListMenuGetScrollAndRow(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow);
@@ -1040,7 +1040,7 @@ static void Task_NormalContextMenu(u8 taskId)
static void Task_NormalContextMenu_HandleInput(u8 taskId)
{
s8 input;
- if (sub_80BF72C() != TRUE)
+ if ((u8)sub_80BF72C() != TRUE)
{
input = Menu_ProcessInputNoWrapAround();
switch (input)
diff --git a/src/dark.c b/src/dark.c
index b6d13afe3..368f5cbd5 100644
--- a/src/dark.c
+++ b/src/dark.c
@@ -82,7 +82,7 @@ static const union AffineAnimCmd gUnknown_83E7900[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const gUnknown_83E7910[] =
+const union AffineAnimCmd *const gUnknown_83E7910[] =
{
gUnknown_83E7890,
gUnknown_83E78A0,
diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c
new file mode 100644
index 000000000..622b26f8f
--- /dev/null
+++ b/src/evolution_graphics.c
@@ -0,0 +1,638 @@
+#include "global.h"
+#include "trig.h"
+#include "random.h"
+#include "decompress.h"
+#include "palette.h"
+#include "sound.h"
+#include "task.h"
+#include "evolution_scene.h"
+#include "evolution_graphics.h"
+#include "constants/songs.h"
+
+static void SpriteCallbackDummy_EvoSparkles(struct Sprite * sprite);
+static void EvoTask_PreEvoSparkleSet1Init(u8 taskId);
+static void EvoTask_CreatePreEvoSparkleSet1(u8 taskId);
+static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskId);
+static void EvoTask_PreEvoSparkleSet2Init(u8 taskId);
+static void EvoTask_CreatePreEvoSparklesSet2(u8 taskId);
+static void EvoTask_PreEvoSparkleSet2Teardown(u8 taskId);
+static void EvoTask_PostEvoSparklesSet1Init(u8 taskId);
+static void EvoTask_CreatePostEvoSparklesSet1(u8 taskId);
+static void EvoTask_PostEvoSparklesSet1Teardown(u8 taskId);
+static void EvoTask_PostEvoSparklesSet2Init(u8 taskId);
+static void EvoTask_CreatePostEvoSparklesSet2(u8 taskId);
+static void EvoTask_PostEvoSparklesSet2Teardown(u8 taskId);
+static void EvoTask_PostEvoSparklesSet2TradeInit(u8 taskId);
+static void EvoTask_CreatePostEvoSparklesSet2Trade(u8 taskId);
+static void EvoTask_PrePostEvoMonSpritesInit(u8 taskId);
+static void EvoTask_ChooseNextEvoSpriteAnim(u8 taskId);
+static void EvoTask_ShrinkOrExpandEvoSprites(u8 taskId);
+static void PreEvoInvisible_PostEvoVisible_KillTask(u8 taskId);
+static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskId);
+
+static const u16 sEvolutionSparklesPalData[] = INCBIN_U16("graphics/misc/evolution_sprite_841EEA4.gbapal");
+static const u32 sEvolutionSparklesTileData[] = INCBIN_U32("graphics/misc/evolution_sprite_841EEA4.4bpp.lz");
+
+static const struct CompressedSpriteSheet sSpriteSheet_EvolutionSparkles[] = {
+ { sEvolutionSparklesTileData, 0x20, 1001 },
+ {}
+};
+static const struct SpritePalette sSpritePalette_EvolutionSparkles[] = {
+ { sEvolutionSparklesPalData, 1001 },
+ {}
+};
+
+static const struct OamData sOamData_EvolutionSparkles = {
+ .y = 160,
+ .priority = 1
+};
+
+static const union AnimCmd sSpriteAnim_EvolutionSparkles_0[] = {
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_EvolutionSparkles[] = {
+ sSpriteAnim_EvolutionSparkles_0
+};
+
+static const struct SpriteTemplate sSpriteTemplate_EvolutionSparkles = {
+ .tileTag = 1001,
+ .paletteTag = 1001,
+ .oam = &sOamData_EvolutionSparkles,
+ .anims = sSpriteAnimTable_EvolutionSparkles,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy_EvoSparkles
+};
+
+static const u16 sEvolutionSparkleMatrixScales[12] = {
+ 0x3C0,
+ 0x380,
+ 0x340,
+ 0x300,
+ 0x2C0,
+ 0x280,
+ 0x240,
+ 0x200,
+ 0x1C0,
+ 0x180,
+ 0x140,
+ 0x100
+};
+
+static const s16 sUnref_841EF28[][2] = {
+ {-4, 0x10},
+ {-3, 0x30},
+ {-2, 0x50},
+ {-1, 0x70},
+ { 1, 0x70},
+ { 2, 0x50},
+ { 3, 0x30},
+ { 4, 0x10}
+};
+
+static void SpriteCallbackDummy_EvoSparkles(struct Sprite * sprite)
+{
+
+}
+
+static void SetEvoSparklesMatrices(void)
+{
+ u16 i;
+ for (i = 0; i < NELEMS(sEvolutionSparkleMatrixScales); i++)
+ SetOamMatrix(i + 20, sEvolutionSparkleMatrixScales[i], 0, 0, sEvolutionSparkleMatrixScales[i]);
+}
+
+static void SpriteCB_PreEvoSparkleSet1(struct Sprite * sprite)
+{
+ u8 mnum;
+ if (sprite->pos1.y > 8)
+ {
+ sprite->pos1.y = 88 - sprite->data[7] * sprite->data[7] / 80;
+ sprite->pos2.y = Sin((u8)sprite->data[6], sprite->data[5]) / 4;
+ sprite->pos2.x = Cos((u8) sprite->data[6], sprite->data[5]);
+ sprite->data[6] += 4;
+ if (sprite->data[7] & 1)
+ sprite->data[5]--;
+ sprite->data[7]++;
+ if (sprite->pos2.y > 0)
+ sprite->subpriority = 1;
+ else
+ sprite->subpriority = 20;
+ mnum = sprite->data[5] / 4 + 20;
+ if (mnum > 31)
+ mnum = 31;
+ sprite->oam.matrixNum = mnum;
+ }
+ else
+ {
+ DestroySprite(sprite);
+ }
+}
+
+static void CreatePreEvoSparkleSet1(u8 a0)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_EvolutionSparkles, 120, 88, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[5] = 48;
+ gSprites[spriteId].data[6] = a0;
+ gSprites[spriteId].data[7] = 0;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[spriteId].oam.matrixNum = 31;
+ gSprites[spriteId].callback = SpriteCB_PreEvoSparkleSet1;
+ }
+}
+
+static void SpriteCB_PreEvoSparkleSet2(struct Sprite * sprite)
+{
+ if (sprite->pos1.y < 88)
+ {
+ sprite->pos1.y = 8 + sprite->data[7] * sprite->data[7] / 5;
+ sprite->pos2.y = Sin((u8)sprite->data[6], sprite->data[5]) / 4;
+ sprite->pos2.x = Cos((u8)sprite->data[6], sprite->data[5]);
+ sprite->data[5] = Sin((u8)(sprite->data[7] * 4), 40) + 8;
+ sprite->data[7]++;
+ }
+ else
+ {
+ DestroySprite(sprite);
+ }
+}
+
+static void CreatePreEvoSparkleSet2(u8 a0)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_EvolutionSparkles, 120, 8, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[5] = 8;
+ gSprites[spriteId].data[6] = a0;
+ gSprites[spriteId].data[7] = 0;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[spriteId].oam.matrixNum = 25;
+ gSprites[spriteId].subpriority = 1;
+ gSprites[spriteId].callback = SpriteCB_PreEvoSparkleSet2;
+ }
+}
+
+static void SpriteCB_PostEvoSparkleSet1(struct Sprite * sprite)
+{
+ if (sprite->data[5] > 8)
+ {
+ sprite->pos2.y = Sin((u8)sprite->data[6], sprite->data[5]);
+ sprite->pos2.x = Cos((u8)sprite->data[6], sprite->data[5]);
+ sprite->data[5] -= sprite->data[3];
+ sprite->data[6] += 4;
+ }
+ else
+ {
+ DestroySprite(sprite);
+ }
+}
+
+static void CreatePostEvoSparkleSet1(u8 a0, u8 a1)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_EvolutionSparkles, 120, 56, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[3] = a1;
+ gSprites[spriteId].data[5] = 120;
+ gSprites[spriteId].data[6] = a0;
+ gSprites[spriteId].data[7] = 0;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[spriteId].oam.matrixNum = 31;
+ gSprites[spriteId].subpriority = 1;
+ gSprites[spriteId].callback = SpriteCB_PostEvoSparkleSet1;
+ }
+}
+
+static void SpriteCB_PostEvoSparkleSet2(struct Sprite * sprite)
+{
+ u8 mnum;
+ if ((sprite->data[7] & 3) == 0)
+ sprite->pos1.y++;
+ if (sprite->data[6] < 128)
+ {
+ sprite->pos2.y = -Sin((u8)sprite->data[6], sprite->data[5]);
+ sprite->pos1.x = 120 + sprite->data[3] * sprite->data[7] / 3;
+ sprite->data[6]++;
+ mnum = 31 - sprite->data[6] * 12 / 128;
+ if (sprite->data[6] > 64)
+ {
+ sprite->subpriority = 1;
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ sprite->subpriority = 20;
+ if (sprite->data[6] > 112 && (sprite->data[6] & 1))
+ sprite->invisible = TRUE;
+ }
+ if (mnum < 20)
+ mnum = 20;
+ sprite->oam.matrixNum = mnum;
+ sprite->data[7]++;
+ }
+ else
+ {
+ DestroySprite(sprite);
+ }
+}
+
+static void CreatePostEvoSparkleSet2(u8 unused)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_EvolutionSparkles, 120, 56, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[3] = 3 - (Random() % 7);
+ gSprites[spriteId].data[5] = 48 + (Random() & 63);
+ gSprites[spriteId].data[7] = 0;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[spriteId].oam.matrixNum = 31;
+ gSprites[spriteId].subpriority = 20;
+ gSprites[spriteId].callback = SpriteCB_PostEvoSparkleSet2;
+ }
+}
+
+void LoadEvoSparkleSpriteAndPal(void)
+{
+ LoadCompressedSpriteSheetUsingHeap(sSpriteSheet_EvolutionSparkles);
+ LoadSpritePalettes(sSpritePalette_EvolutionSparkles);
+}
+
+u8 LaunchTask_PreEvoSparklesSet1(u16 a0)
+{
+ u8 taskId = CreateTask(EvoTask_PreEvoSparkleSet1Init, 0);
+ gTasks[taskId].data[1] = a0;
+ return taskId;
+}
+
+static void EvoTask_PreEvoSparkleSet1Init(u8 taskId)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskId].data[15] = 0;
+ BeginNormalPaletteFade(3 << gTasks[taskId].data[1], 10, 0, 16, RGB_WHITE);
+ gTasks[taskId].func = EvoTask_CreatePreEvoSparkleSet1;
+ PlaySE(SE_W025);
+}
+
+static void EvoTask_CreatePreEvoSparkleSet1(u8 taskId)
+{
+ u8 i;
+ if (gTasks[taskId].data[15] < 64)
+ {
+ if ((gTasks[taskId].data[15] & 7) == 0)
+ {
+ for (i = 0; i < 4; i++)
+ CreatePreEvoSparkleSet1(2 * (gTasks[taskId].data[15] & 0x78) + 64 * i);
+ }
+ gTasks[taskId].data[15]++;
+ }
+ else
+ {
+ gTasks[taskId].data[15] = 96;
+ gTasks[taskId].func = EvoTask_WaitForPre1SparklesToGoUp;
+ }
+}
+
+static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskId)
+{
+ if (gTasks[taskId].data[15] != 0)
+ gTasks[taskId].data[15]--;
+ else
+ DestroyTask(taskId);
+}
+
+u8 LaunchTask_PreEvoSparklesSet2(void)
+{
+ u8 taskId = CreateTask(EvoTask_PreEvoSparkleSet2Init, 0);
+ return taskId;
+}
+
+static void EvoTask_PreEvoSparkleSet2Init(u8 taskId)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskId].data[15] = 0;
+ gTasks[taskId].func = EvoTask_CreatePreEvoSparklesSet2;
+ PlaySE(SE_W062B);
+}
+
+static void EvoTask_CreatePreEvoSparklesSet2(u8 taskId)
+{
+ u8 i;
+ if (gTasks[taskId].data[15] < 96)
+ {
+ if (gTasks[taskId].data[15] < 6)
+ {
+ for (i = 0; i < 9; i++)
+ CreatePreEvoSparkleSet2(16 * i);
+ }
+ gTasks[taskId].data[15]++;
+ }
+ else
+ {
+ gTasks[taskId].func = EvoTask_PreEvoSparkleSet2Teardown;
+ }
+}
+
+static void EvoTask_PreEvoSparkleSet2Teardown(u8 taskId)
+{
+ DestroyTask(taskId);
+}
+
+u8 LaunchTask_PostEvoSparklesSet1(void)
+{
+ u8 taskId = CreateTask(EvoTask_PostEvoSparklesSet1Init, 0);
+ return taskId;
+}
+
+static void EvoTask_PostEvoSparklesSet1Init(u8 taskId)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskId].data[15] = 0;
+ gTasks[taskId].func = EvoTask_CreatePostEvoSparklesSet1;
+ PlaySE(SE_REAPOKE);
+}
+
+static void EvoTask_CreatePostEvoSparklesSet1(u8 taskId)
+{
+ u8 i;
+ if (gTasks[taskId].data[15] < 48)
+ {
+ if (gTasks[taskId].data[15] == 0)
+ {
+ for (i = 0; i < 16; i++)
+ {
+ CreatePostEvoSparkleSet1(i * 16, 4);
+ }
+ }
+ if (gTasks[taskId].data[15] == 32)
+ {
+ for (i = 0; i < 16; i++)
+ {
+ CreatePostEvoSparkleSet1(i * 16, 8);
+ }
+ }
+ gTasks[taskId].data[15]++;
+ }
+ else
+ {
+ gTasks[taskId].func = EvoTask_PostEvoSparklesSet1Teardown;
+ }
+}
+
+static void EvoTask_PostEvoSparklesSet1Teardown(u8 taskId)
+{
+ DestroyTask(taskId);
+}
+
+u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species)
+{
+ u8 taskId = CreateTask(EvoTask_PostEvoSparklesSet2Init, 0);
+ gTasks[taskId].data[2] = species;
+ return taskId;
+}
+
+static void EvoTask_PostEvoSparklesSet2Init(u8 taskId)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskId].data[15] = 0;
+ IsMovingBackgroundTaskRunning();
+ CpuCopy16(&gPlttBufferFaded[32], &gPlttBufferUnfaded[32], 96);
+ BeginNormalPaletteFade(0xFFF90F1C, 0, 0, 16, RGB_WHITE);
+ gTasks[taskId].func = EvoTask_CreatePostEvoSparklesSet2;
+ PlaySE(SE_W080);
+}
+
+static void EvoTask_CreatePostEvoSparklesSet2(u8 taskId)
+{
+ u8 i;
+ if (gTasks[taskId].data[15] < 128)
+ {
+ switch (gTasks[taskId].data[15])
+ {
+ default:
+ if (gTasks[taskId].data[15] < 50)
+ CreatePostEvoSparkleSet2(Random() & 7);
+ break;
+ case 0:
+ for (i = 0; i < 8; i++)
+ CreatePostEvoSparkleSet2(i);
+ break;
+ case 32:
+ BeginNormalPaletteFade(0xFFFF0F1C, 16, 16, 0, RGB_WHITE);
+ break;
+ }
+ gTasks[taskId].data[15]++;
+ }
+ else
+ {
+ gTasks[taskId].func = EvoTask_PostEvoSparklesSet2Teardown;
+ }
+}
+
+static void EvoTask_PostEvoSparklesSet2Teardown(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ DestroyTask(taskId);
+}
+
+u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species)
+{
+ u8 taskId = CreateTask(EvoTask_PostEvoSparklesSet2TradeInit, 0);
+ gTasks[taskId].data[2] = species;
+ return taskId;
+}
+
+static void EvoTask_PostEvoSparklesSet2TradeInit(u8 taskId)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskId].data[15] = 0;
+ IsMovingBackgroundTaskRunning();
+ CpuCopy16(&gPlttBufferFaded[32], &gPlttBufferUnfaded[32], 96);
+ BeginNormalPaletteFade(0xFFF90F00, 0, 0, 16, RGB_WHITE);
+ gTasks[taskId].func = EvoTask_CreatePostEvoSparklesSet2Trade;
+ PlaySE(SE_W080);
+}
+
+static void EvoTask_CreatePostEvoSparklesSet2Trade(u8 taskId)
+{
+ u8 i;
+ if (gTasks[taskId].data[15] < 128)
+ {
+ switch (gTasks[taskId].data[15])
+ {
+ default:
+ if (gTasks[taskId].data[15] < 50)
+ CreatePostEvoSparkleSet2(Random() & 7);
+ break;
+ case 0:
+ for (i = 0; i < 8; i++)
+ CreatePostEvoSparkleSet2(i);
+ break;
+ case 32:
+ BeginNormalPaletteFade(0xFFFF0F00, 16, 16, 0, RGB_WHITE);
+ break;
+ }
+ gTasks[taskId].data[15]++;
+ }
+ else
+ {
+ gTasks[taskId].func = EvoTask_PostEvoSparklesSet2Teardown;
+ }
+}
+
+static void SpriteCallbackDummy_MonSprites(struct Sprite * sprite)
+{
+
+}
+
+#define tPreEvoSpriteId data[1]
+#define tPostEvoSpriteId data[2]
+#define tPreEvoScale data[3]
+#define tPostEvoScale data[4]
+#define tDirection data[5]
+#define tSpeed data[6]
+
+u8 LaunchTask_PrePostEvoMonSprites(u8 preEvoSpriteId, u8 postEvoSpriteId)
+{
+ u16 i;
+ u8 taskId;
+ u16 palette[16];
+ for (i = 0; i < 16; i++)
+ palette[i] = RGB_WHITE;
+ taskId = CreateTask(EvoTask_PrePostEvoMonSpritesInit, 0);
+ gTasks[taskId].tPreEvoSpriteId = preEvoSpriteId;
+ gTasks[taskId].tPostEvoSpriteId = postEvoSpriteId;
+ gTasks[taskId].tPreEvoScale = 256;
+ gTasks[taskId].tPostEvoScale = 16;
+ SetOamMatrix(30, 0x10000 / gTasks[taskId].tPreEvoScale, 0, 0, 0x10000 / gTasks[taskId].tPreEvoScale);
+ SetOamMatrix(31, 0x10000 / gTasks[taskId].tPostEvoScale, 0, 0, 0x10000 / gTasks[taskId].tPostEvoScale);
+ gSprites[preEvoSpriteId].callback = SpriteCallbackDummy_MonSprites;
+ gSprites[preEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[preEvoSpriteId].oam.matrixNum = 30;
+ gSprites[preEvoSpriteId].invisible = FALSE;
+ CpuCopy16(palette, &gPlttBufferFaded[256 + 16 * gSprites[preEvoSpriteId].oam.paletteNum], 32);
+ gSprites[postEvoSpriteId].callback = SpriteCallbackDummy_MonSprites;
+ gSprites[postEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[postEvoSpriteId].oam.matrixNum = 31;
+ gSprites[postEvoSpriteId].invisible = FALSE;
+ CpuCopy16(palette, &gPlttBufferFaded[256 + 16 * gSprites[postEvoSpriteId].oam.paletteNum], 32);
+ gTasks[taskId].EvoGraphicsTaskEvoStop = FALSE;
+ return taskId;
+}
+
+static void EvoTask_PrePostEvoMonSpritesInit(u8 taskId)
+{
+ gTasks[taskId].tDirection = FALSE;
+ gTasks[taskId].tSpeed = 8;
+ gTasks[taskId].func = EvoTask_ChooseNextEvoSpriteAnim;
+}
+
+static void EvoTask_ChooseNextEvoSpriteAnim(u8 taskId)
+{
+ if (gTasks[taskId].EvoGraphicsTaskEvoStop)
+ {
+ PreEvoVisible_PostEvoInvisible_KillTask(taskId);
+ }
+ else if (gTasks[taskId].tSpeed == 128)
+ {
+ PreEvoInvisible_PostEvoVisible_KillTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].tSpeed += 2;
+ gTasks[taskId].tDirection ^= TRUE;
+ gTasks[taskId].func = EvoTask_ShrinkOrExpandEvoSprites;
+ }
+}
+
+static void EvoTask_ShrinkOrExpandEvoSprites(u8 taskId)
+{
+ u8 r6;
+ if (gTasks[taskId].EvoGraphicsTaskEvoStop)
+ {
+ gTasks[taskId].func = PreEvoVisible_PostEvoInvisible_KillTask;
+ }
+ else
+ {
+ r6 = 0;
+ if (!gTasks[taskId].tDirection)
+ {
+ if (gTasks[taskId].tPreEvoScale < 0x100 - gTasks[taskId].tSpeed)
+ {
+ gTasks[taskId].tPreEvoScale += gTasks[taskId].tSpeed;
+ }
+ else
+ {
+ gTasks[taskId].tPreEvoScale = 0x100;
+ r6 = 1;
+ }
+ if (gTasks[taskId].tPostEvoScale > 0x10 + gTasks[taskId].tSpeed)
+ {
+ gTasks[taskId].tPostEvoScale -= gTasks[taskId].tSpeed;
+ }
+ else
+ {
+ gTasks[taskId].tPostEvoScale = 0x10;
+ r6++;
+ }
+ }
+ else
+ {
+ if (gTasks[taskId].tPostEvoScale < 0x100 - gTasks[taskId].tSpeed)
+ {
+ gTasks[taskId].tPostEvoScale += gTasks[taskId].tSpeed;
+ }
+ else
+ {
+ gTasks[taskId].tPostEvoScale = 0x100;
+ r6 = 1;
+ }
+ if (gTasks[taskId].tPreEvoScale > 0x10 + gTasks[taskId].tSpeed)
+ {
+ gTasks[taskId].tPreEvoScale -= gTasks[taskId].tSpeed;
+ }
+ else
+ {
+ gTasks[taskId].tPreEvoScale = 0x10;
+ r6++;
+ }
+ }
+ SetOamMatrix(30, 0x10000 / gTasks[taskId].tPreEvoScale, 0, 0, 0x10000 / gTasks[taskId].tPreEvoScale);
+ SetOamMatrix(31, 0x10000 / gTasks[taskId].tPostEvoScale, 0, 0, 0x10000 / gTasks[taskId].tPostEvoScale);
+ if (r6 == 2)
+ {
+ gTasks[taskId].func = EvoTask_ChooseNextEvoSpriteAnim;
+ }
+ }
+}
+
+static void PreEvoInvisible_PostEvoVisible_KillTask(u8 taskId)
+{
+ gSprites[gTasks[taskId].tPreEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_OFF;
+ gSprites[gTasks[taskId].tPreEvoSpriteId].oam.matrixNum = 0;
+ gSprites[gTasks[taskId].tPreEvoSpriteId].invisible = TRUE;
+ gSprites[gTasks[taskId].tPostEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_OFF;
+ gSprites[gTasks[taskId].tPostEvoSpriteId].oam.matrixNum = 0;
+ gSprites[gTasks[taskId].tPostEvoSpriteId].invisible = FALSE;
+ DestroyTask(taskId);
+}
+
+static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskId)
+{
+ gSprites[gTasks[taskId].tPreEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_OFF;
+ gSprites[gTasks[taskId].tPreEvoSpriteId].oam.matrixNum = 0;
+ gSprites[gTasks[taskId].tPreEvoSpriteId].invisible = FALSE;
+ gSprites[gTasks[taskId].tPostEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_OFF;
+ gSprites[gTasks[taskId].tPostEvoSpriteId].oam.matrixNum = 0;
+ gSprites[gTasks[taskId].tPostEvoSpriteId].invisible = TRUE;
+ DestroyTask(taskId);
+}
+
+#undef tPreEvoSpriteId
+#undef tPostEvoSpriteId
+#undef tPreEvoScale
+#undef tPostEvoScale
+#undef tDirection
+#undef tSpeed
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
new file mode 100644
index 000000000..f3b05b32c
--- /dev/null
+++ b/src/evolution_scene.c
@@ -0,0 +1,1569 @@
+#include "global.h"
+#include "malloc.h"
+#include "battle.h"
+#include "battle_message.h"
+#include "bg.h"
+#include "data.h"
+#include "decompress.h"
+#include "help_system.h"
+#include "evolution_scene.h"
+#include "evolution_graphics.h"
+#include "gpu_regs.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "m4a.h"
+#include "event_data.h"
+#include "trade_scene.h"
+#include "main.h"
+#include "new_menu_helpers.h"
+#include "menu.h"
+#include "overworld.h"
+#include "palette.h"
+#include "pokedex.h"
+#include "pokemon.h"
+#include "pokemon_summary_screen.h"
+#include "scanline_effect.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "text.h"
+#include "text_window.h"
+#include "trig.h"
+#include "trade.h"
+#include "util.h"
+#include "battle_string_ids.h"
+#include "constants/species.h"
+#include "constants/songs.h"
+#include "constants/pokemon.h"
+
+struct EvoInfo
+{
+ u8 preEvoSpriteId;
+ u8 postEvoSpriteId;
+ u8 evoTaskId;
+ u8 field_3;
+ u16 savedPalette[48];
+};
+
+// EWRAM vars
+static EWRAM_DATA struct EvoInfo *sEvoStructPtr = NULL;
+static EWRAM_DATA u16 *sEvoMovingBgPtr = NULL;
+
+// IWRAM common
+void (*gCB2_AfterEvolution)(void);
+
+#define sEvoCursorPos gBattleCommunication[1] // when learning a new move
+#define sEvoGraphicsTaskId gBattleCommunication[2]
+
+// this file's functions
+static void Task_EvolutionScene(u8 taskId);
+static void Task_TradeEvolutionScene(u8 taskId);
+static void CB2_EvolutionSceneUpdate(void);
+static void CB2_TradeEvolutionSceneUpdate(void);
+static void EvoDummyFunc(void);
+static void VBlankCB_EvolutionScene(void);
+static void VBlankCB_TradeEvolutionScene(void);
+static void DestroyMovingBackgroundTasks(void);
+static void InitMovingBackgroundTask(bool8 isLink);
+static void Task_MovingBackgroundPos(u8 taskId);
+static void ResetBgRegsAfterMovingBackgroundCancel(void);
+
+// const data
+static const u16 sUnrefPal_83F6C90[] = INCBIN_U16("graphics/evolution_scene/unknown_5B4114.gbapal");
+static const u32 sMovingBackgroundTiles[] = INCBIN_U32("graphics/evolution_scene/bg.4bpp.lz");
+static const u32 sMovingBackgroundMap1[] = INCBIN_U32("graphics/evolution_scene/bg.bin.lz");
+static const u32 sMovingBackgroundMap2[] = INCBIN_U32("graphics/evolution_scene/bg2.bin.lz");
+static const u16 sBlackPalette[] = INCBIN_U16("graphics/evolution_scene/gray_transition_intro.gbapal");
+static const u16 unref_83F7D80[] = INCBIN_U16("graphics/evolution_scene/unref_83F7D80.bin");
+static const u16 sMovingBgPals[] = INCBIN_U16("graphics/evolution_scene/transition.gbapal");
+
+static const u8 sText_ShedinjaJapaneseName[] = _("ヌケニン");
+
+static const u8 unref_83F8445[] = _("{COLOR RED}{HIGHLIGHT DARK_GREY}{SHADOW GREEN}");
+
+static const u8 unref_83F844F[][10] = {
+ _("â–¶\n "),
+ _(" \nâ–¶"),
+ _(" \n ")
+};
+
+// start frame, stop frame, loop count, delay
+static const u8 sMovingBackgroundTimers[][4] =
+{
+ { 0, 12, 1, 6 },
+ { 13, 36, 5, 2 },
+ { 13, 24, 1, 2 },
+ { 37, 49, 1, 6 },
+};
+
+static const u8 sMovingBgPalIndices[][16] = {
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 0 },
+ { 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0 },
+ { 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0 },
+ { 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11, 0, 0 },
+ { 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0 },
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0 },
+ { 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 12, 0, 0 },
+ { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 12, 11, 0, 0 },
+ { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 12, 11, 10, 0, 0 },
+ { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 12, 11, 10, 9, 0, 0 },
+ { 0, 6, 7, 8, 9, 10, 11, 12, 13, 12, 11, 10, 9, 8, 0, 0 },
+ { 0, 7, 8, 9, 10, 11, 12, 13, 12, 11, 10, 9, 8, 7, 0, 0 },
+ { 0, 8, 9, 10, 11, 12, 13, 12, 11, 10, 9, 8, 7, 6, 0, 0 },
+ { 0, 9, 10, 11, 12, 13, 12, 11, 10, 9, 8, 7, 6, 5, 0, 0 },
+ { 0, 10, 11, 12, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 0, 0 },
+ { 0, 11, 12, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 0, 0 },
+ { 0, 12, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 0 },
+ { 0, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0 },
+ { 0, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, 0, 0 },
+ { 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, 3, 0, 0 },
+ { 0, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, 3, 4, 0, 0 },
+ { 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, 3, 4, 5, 0, 0 },
+ { 0, 8, 7, 6, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 0, 0 },
+ { 0, 7, 6, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 7, 0, 0 },
+ { 0, 6, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 7, 8, 0, 0 },
+ { 0, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0 },
+ { 0, 4, 3, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0 },
+ { 0, 3, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0 },
+ { 0, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0 },
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0 },
+ { 0, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0 },
+ { 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0 },
+ { 0, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0 },
+ { 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0 },
+ { 0, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+};
+
+static void CB2_BeginEvolutionScene(void)
+{
+ UpdatePaletteFade();
+ RunTasks();
+}
+
+#define tState data[0]
+#define tPreEvoSpecies data[1]
+#define tPostEvoSpecies data[2]
+#define tCanStop data[3]
+#define tBits data[3]
+#define tLearnsFirstMove data[4]
+#define tLearnMoveState data[6]
+#define tData7 data[7]
+#define tData8 data[8]
+#define tEvoWasStopped data[9]
+#define tPartyId data[10]
+
+#define TASK_BIT_CAN_STOP 0x1
+#define TASK_BIT_LEARN_MOVE 0x80
+
+static void Task_BeginEvolutionScene(u8 taskId)
+{
+ struct Pokemon* mon = NULL;
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ gTasks[taskId].tState++;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ u16 speciesToEvolve;
+ bool8 canStopEvo;
+ u8 partyId;
+
+ mon = &gPlayerParty[gTasks[taskId].tPartyId];
+ speciesToEvolve = gTasks[taskId].tPostEvoSpecies;
+ canStopEvo = gTasks[taskId].tCanStop;
+ partyId = gTasks[taskId].tPartyId;
+
+ DestroyTask(taskId);
+ EvolutionScene(mon, speciesToEvolve, canStopEvo, partyId);
+ }
+ break;
+ }
+}
+
+void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyId)
+{
+ u8 taskId = CreateTask(Task_BeginEvolutionScene, 0);
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tPostEvoSpecies = speciesToEvolve;
+ gTasks[taskId].tCanStop = canStopEvo;
+ gTasks[taskId].tPartyId = partyId;
+ SetMainCallback2(CB2_BeginEvolutionScene);
+}
+
+void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyId)
+{
+ u8 name[20];
+ u16 currSpecies;
+ u32 trainerId, personality;
+ const struct CompressedSpritePalette* pokePal;
+ u8 id;
+
+ SetHBlankCallback(NULL);
+ SetVBlankCallback(NULL);
+ CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
+
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WIN1H, 0);
+ SetGpuReg(REG_OFFSET_WIN1V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+
+ ResetPaletteFade();
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ gBattle_BG2_Y = 0;
+ gBattle_BG3_X = 256;
+ gBattle_BG3_Y = 0;
+
+ gBattleTerrain = BATTLE_TERRAIN_PLAIN;
+
+ InitBattleBgsVideo();
+ LoadBattleTextboxAndBackground();
+ ResetSpriteData();
+ ScanlineEffect_Stop();
+ ResetTasks();
+ FreeAllSpritePalettes();
+
+ gReservedSpritePaletteCount = 4;
+
+ sEvoStructPtr = AllocZeroed(sizeof(struct EvoInfo));
+ AllocateMonSpritesGfx();
+
+ GetMonData(mon, MON_DATA_NICKNAME, name);
+ StringCopy10(gStringVar1, name);
+ StringCopy(gStringVar2, gSpeciesNames[speciesToEvolve]);
+
+ // preEvo sprite
+ currSpecies = GetMonData(mon, MON_DATA_SPECIES);
+ trainerId = GetMonData(mon, MON_DATA_OT_ID);
+ personality = GetMonData(mon, MON_DATA_PERSONALITY);
+ DecompressPicFromTable(&gMonFrontPicTable[currSpecies],
+ gMonSpritesGfxPtr->sprites[1],
+ currSpecies);
+ pokePal = GetMonSpritePalStructFromOtIdPersonality(currSpecies, trainerId, personality);
+ LoadCompressedPalette(pokePal->data, 0x110, 0x20);
+
+ SetMultiuseSpriteTemplateToPokemon(currSpecies, 1);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->preEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+
+ gSprites[id].callback = SpriteCallbackDummy2;
+ gSprites[id].oam.paletteNum = 1;
+ gSprites[id].invisible = TRUE;
+
+ // postEvo sprite
+ DecompressPicFromTable(&gMonFrontPicTable[speciesToEvolve],
+ gMonSpritesGfxPtr->sprites[3],
+ speciesToEvolve);
+ pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality);
+ LoadCompressedPalette(pokePal->data, 0x120, 0x20);
+
+ SetMultiuseSpriteTemplateToPokemon(speciesToEvolve, 3);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+ gSprites[id].callback = SpriteCallbackDummy2;
+ gSprites[id].oam.paletteNum = 2;
+ gSprites[id].invisible = TRUE;
+
+ LoadEvoSparkleSpriteAndPal();
+
+ sEvoStructPtr->evoTaskId = id = CreateTask(Task_EvolutionScene, 0);
+ gTasks[id].tState = 0;
+ gTasks[id].tPreEvoSpecies = currSpecies;
+ gTasks[id].tPostEvoSpecies = speciesToEvolve;
+ gTasks[id].tCanStop = canStopEvo;
+ gTasks[id].tLearnsFirstMove = TRUE;
+ gTasks[id].tEvoWasStopped = FALSE;
+ gTasks[id].tPartyId = partyId;
+
+ memcpy(&sEvoStructPtr->savedPalette, &gPlttBufferUnfaded[0x20], 0x60);
+
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP);
+
+ SetHBlankCallback(EvoDummyFunc);
+ SetVBlankCallback(VBlankCB_EvolutionScene);
+ m4aMPlayAllStop();
+ HelpSystem_Disable();
+ SetMainCallback2(CB2_EvolutionSceneUpdate);
+}
+
+static void CB2_EvolutionSceneLoadGraphics(void)
+{
+ u8 id;
+ const struct CompressedSpritePalette* pokePal;
+ u16 postEvoSpecies;
+ u32 trainerId, personality;
+ struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoStructPtr->evoTaskId].tPartyId];
+
+ postEvoSpecies = gTasks[sEvoStructPtr->evoTaskId].tPostEvoSpecies;
+ trainerId = GetMonData(Mon, MON_DATA_OT_ID);
+ personality = GetMonData(Mon, MON_DATA_PERSONALITY);
+
+ SetHBlankCallback(NULL);
+ SetVBlankCallback(NULL);
+ CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
+
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WIN1H, 0);
+ SetGpuReg(REG_OFFSET_WIN1V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+
+ ResetPaletteFade();
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ gBattle_BG2_Y = 0;
+ gBattle_BG3_X = 256;
+ gBattle_BG3_Y = 0;
+
+ gBattleTerrain = BATTLE_TERRAIN_PLAIN;
+
+ InitBattleBgsVideo();
+ LoadBattleTextboxAndBackground();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 4;
+
+ DecompressPicFromTable(&gMonFrontPicTable[postEvoSpecies],
+ gMonSpritesGfxPtr->sprites[3],
+ postEvoSpecies);
+ pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality);
+
+ LoadCompressedPalette(pokePal->data, 0x120, 0x20);
+
+ SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, 3);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+
+ gSprites[id].callback = SpriteCallbackDummy2;
+ gSprites[id].oam.paletteNum = 2;
+
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP);
+
+ SetHBlankCallback(EvoDummyFunc);
+ SetVBlankCallback(VBlankCB_EvolutionScene);
+ SetMainCallback2(CB2_EvolutionSceneUpdate);
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+}
+
+static void CB2_TradeEvolutionSceneLoadGraphics(void)
+{
+ struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoStructPtr->evoTaskId].tPartyId];
+ u16 postEvoSpecies = gTasks[sEvoStructPtr->evoTaskId].tPostEvoSpecies;
+
+ switch (gMain.state)
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetHBlankCallback(NULL);
+ SetVBlankCallback(NULL);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 4;
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ gBattle_BG2_Y = 0;
+ gBattle_BG3_X = 256;
+ gBattle_BG3_Y = 0;
+ gMain.state++;
+ break;
+ case 1:
+ ResetPaletteFade();
+ SetHBlankCallback(EvoDummyFunc);
+ SetVBlankCallback(VBlankCB_TradeEvolutionScene);
+ gMain.state++;
+ break;
+ case 2:
+ LoadTradeAnimGfx();
+ gMain.state++;
+ break;
+ case 3:
+ FillBgTilemapBufferRect(1, 0, 0, 0, 0x20, 0x20, 0x11);
+ CopyBgTilemapBufferToVram(1);
+ gMain.state++;
+ break;
+ case 4:
+ {
+ const struct CompressedSpritePalette* pokePal;
+ u32 trainerId = GetMonData(Mon, MON_DATA_OT_ID);
+ u32 personality = GetMonData(Mon, MON_DATA_PERSONALITY);
+ DecompressPicFromTable(&gMonFrontPicTable[postEvoSpecies],
+ gMonSpritesGfxPtr->sprites[3],
+ postEvoSpecies);
+ pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality);
+ LoadCompressedPalette(pokePal->data, 0x120, 0x20);
+ gMain.state++;
+ }
+ break;
+ case 5:
+ {
+ u8 id;
+
+ SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, 1);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+
+ gSprites[id].callback = SpriteCallbackDummy2;
+ gSprites[id].oam.paletteNum = 2;
+ gMain.state++;
+ LinkTradeDrawWindow();
+ }
+ break;
+ case 6:
+ if (gWirelessCommType)
+ {
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ }
+ BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK);
+ gMain.state++;
+ break;
+ case 7:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ InitTradeSequenceBgGpuRegs();
+ ShowBg(0);
+ ShowBg(1);
+ SetMainCallback2(CB2_TradeEvolutionSceneUpdate);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP);
+ break;
+ }
+}
+
+void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteId, u8 partyId)
+{
+ u8 name[20];
+ u16 currSpecies;
+ u32 trainerId, personality;
+ const struct CompressedSpritePalette* pokePal;
+ u8 id;
+
+ GetMonData(mon, MON_DATA_NICKNAME, name);
+ StringCopy10(gStringVar1, name);
+ StringCopy(gStringVar2, gSpeciesNames[speciesToEvolve]);
+
+ gAffineAnimsDisabled = TRUE;
+
+ // preEvo sprite
+ currSpecies = GetMonData(mon, MON_DATA_SPECIES);
+ personality = GetMonData(mon, MON_DATA_PERSONALITY);
+ trainerId = GetMonData(mon, MON_DATA_OT_ID);
+
+ sEvoStructPtr = AllocZeroed(sizeof(struct EvoInfo));
+ sEvoStructPtr->preEvoSpriteId = preEvoSpriteId;
+
+ DecompressPicFromTable(&gMonFrontPicTable[speciesToEvolve],
+ gMonSpritesGfxPtr->sprites[1],
+ speciesToEvolve);
+
+ pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality);
+ LoadCompressedPalette(pokePal->data, 0x120, 0x20);
+
+ SetMultiuseSpriteTemplateToPokemon(speciesToEvolve, 1);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+
+ gSprites[id].callback = SpriteCallbackDummy2;
+ gSprites[id].oam.paletteNum = 2;
+ gSprites[id].invisible = TRUE;
+
+ LoadEvoSparkleSpriteAndPal();
+
+ sEvoStructPtr->evoTaskId = id = CreateTask(Task_TradeEvolutionScene, 0);
+ gTasks[id].tState = 0;
+ gTasks[id].tPreEvoSpecies = currSpecies;
+ gTasks[id].tPostEvoSpecies = speciesToEvolve;
+ gTasks[id].tLearnsFirstMove = TRUE;
+ gTasks[id].tEvoWasStopped = FALSE;
+ gTasks[id].tPartyId = partyId;
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ gBattle_BG2_Y = 0;
+ gBattle_BG3_X = 256;
+ gBattle_BG3_Y = 0;
+
+ gTextFlags.useAlternateDownArrow = TRUE;
+
+ SetVBlankCallback(VBlankCB_TradeEvolutionScene);
+ SetMainCallback2(CB2_TradeEvolutionSceneUpdate);
+}
+
+static void CB2_EvolutionSceneUpdate(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTextPrinters();
+ UpdatePaletteFade();
+ RunTasks();
+}
+
+static void CB2_TradeEvolutionSceneUpdate(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTextPrinters();
+ UpdatePaletteFade();
+ RunTasks();
+}
+
+static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon)
+{
+ u32 data = 0;
+ if (gEvolutionTable[preEvoSpecies][0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < 6)
+ {
+ s32 i;
+ struct Pokemon* shedinja = &gPlayerParty[gPlayerPartyCount];
+ const struct Evolution *evos;
+ const struct Evolution *evos2;
+
+ CopyMon(&gPlayerParty[gPlayerPartyCount], mon, sizeof(struct Pokemon));
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_SPECIES, (&gEvolutionTable[preEvoSpecies][1].targetSpecies));
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_NICKNAME, (gSpeciesNames[gEvolutionTable[preEvoSpecies][1].targetSpecies]));
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_HELD_ITEM, (&data));
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_MARKINGS, (&data));
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_ENCRYPT_SEPARATOR, (&data));
+
+ for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + 5; i++)
+ SetMonData(&gPlayerParty[gPlayerPartyCount], i, (&data));
+ for (i = MON_DATA_CHAMPION_RIBBON; i <= MON_DATA_FATEFUL_ENCOUNTER; i++)
+ SetMonData(&gPlayerParty[gPlayerPartyCount], i, (&data));
+
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_STATUS, (&data));
+ data = 0xFF;
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_MAIL, (&data));
+
+ CalculateMonStats(&gPlayerParty[gPlayerPartyCount]);
+ CalculatePlayerPartyCount();
+
+ // can't match it otherwise, ehh
+ evos2 = gEvolutionTable[0];
+ evos = evos2 + EVOS_PER_MON * preEvoSpecies;
+
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(evos[1].targetSpecies), FLAG_SET_SEEN);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(evos[1].targetSpecies), FLAG_SET_CAUGHT);
+
+ if (GetMonData(shedinja, MON_DATA_SPECIES) == SPECIES_SHEDINJA
+ && GetMonData(shedinja, MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE
+ && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NINJASK)
+ SetMonData(shedinja, MON_DATA_NICKNAME, sText_ShedinjaJapaneseName);
+ }
+}
+
+static void Task_EvolutionScene(u8 taskId)
+{
+ u32 var;
+ struct Pokemon* mon = &gPlayerParty[gTasks[taskId].tPartyId];
+
+ // Automatically cancel if the Pokemon would evolve into a species you have not
+ // yet unlocked, such as Crobat.
+ if (!IsNationalPokedexEnabled()
+ && gTasks[taskId].tState == 8
+ && gTasks[taskId].tPostEvoSpecies > SPECIES_MEW)
+ {
+ gTasks[taskId].tState = 17;
+ gTasks[taskId].tEvoWasStopped = TRUE;
+ gTasks[sEvoGraphicsTaskId].EvoGraphicsTaskEvoStop = TRUE;
+ DestroyMovingBackgroundTasks();
+ return;
+ }
+
+ // check if B Button was held, so the evolution gets stopped
+ if (gMain.heldKeys == B_BUTTON
+ && gTasks[taskId].tState == 8
+ && gTasks[sEvoGraphicsTaskId].isActive
+ && gTasks[taskId].tBits & TASK_BIT_CAN_STOP)
+ {
+ gTasks[taskId].tState = 17;
+ gTasks[sEvoGraphicsTaskId].EvoGraphicsTaskEvoStop = TRUE;
+ DestroyMovingBackgroundTasks();
+ return;
+ }
+
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ gSprites[sEvoStructPtr->preEvoSpriteId].invisible = FALSE;
+ gTasks[taskId].tState++;
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ break;
+ case 1: // print 'whoa, poke is evolving!!!' msg
+ if (!gPaletteFade.active)
+ {
+ StringExpandPlaceholders(gStringVar4, gText_PkmnIsEvolving);
+ BattlePutTextOnWindow(gStringVar4, 0);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 2: // wait for string, animate mon(and play its cry)
+ if (!IsTextPrinterActive(0))
+ {
+ PlayCry1(gTasks[taskId].tPreEvoSpecies, 0);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 3:
+ if (IsCryFinished()) // wait for animation, play tu du SE
+ {
+ PlaySE(MUS_ME_SHINKA);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 4: // play evolution music and fade screen black
+ if (!IsSEPlaying())
+ {
+ PlayNewMapMusic(MUS_SHINKA);
+ gTasks[taskId].tState++;
+ BeginNormalPaletteFade(0x1C, 4, 0, 0x10, RGB_BLACK);
+ }
+ break;
+ case 5: // launch moving bg task, preapre evo sparkles
+ if (!gPaletteFade.active)
+ {
+ InitMovingBackgroundTask(FALSE);
+ sEvoGraphicsTaskId = LaunchTask_PreEvoSparklesSet1(17);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 6: // another set of evo sparkles
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ gTasks[taskId].tState++;
+ sEvoStructPtr->field_3 = 1;
+ sEvoGraphicsTaskId = LaunchTask_PreEvoSparklesSet2();
+ }
+ break;
+ case 7: // launch task that flashes pre evo with post evo sprites
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ sEvoGraphicsTaskId = LaunchTask_PrePostEvoMonSprites(sEvoStructPtr->preEvoSpriteId, sEvoStructPtr->postEvoSpriteId);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 8: // wait for the above task to finish
+ if (--sEvoStructPtr->field_3 == 0)
+ {
+ sEvoStructPtr->field_3 = 3;
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 9: // post evo sparkles
+ sEvoGraphicsTaskId = LaunchTask_PostEvoSparklesSet1();
+ gTasks[taskId].tState++;
+ break;
+ case 10:
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ sEvoGraphicsTaskId = LaunchTask_PostEvoSparklesSet2AndFlash(gTasks[taskId].tPostEvoSpecies);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 11: // play tu du sound after evolution
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ PlaySE(SE_EXP);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 12: // stop music, return screen to pre-fade state
+ if (IsSEPlaying())
+ {
+ m4aMPlayAllStop();
+ memcpy(&gPlttBufferUnfaded[0x20], sEvoStructPtr->savedPalette, 0x60);
+ ResetBgRegsAfterMovingBackgroundCancel();
+ BeginNormalPaletteFade(0x1C, 0, 0x10, 0, RGB_BLACK);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 13: // animate mon
+ if (!gPaletteFade.active)
+ {
+ PlayCry1(gTasks[taskId].tPostEvoSpecies, 0);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 14: // congratulations string and rename prompt
+ if (IsCryFinished())
+ {
+ StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
+ BattlePutTextOnWindow(gStringVar4, 0);
+ PlayBGM(MUS_FANFA5);
+ gTasks[taskId].tState++;
+ SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskId].tPostEvoSpecies));
+ CalculateMonStats(mon);
+ EvolutionRenameMon(mon, gTasks[taskId].tPreEvoSpecies, gTasks[taskId].tPostEvoSpecies);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_SEEN);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_CAUGHT);
+ IncrementGameStat(GAME_STAT_EVOLVED_POKEMON);
+ }
+ break;
+ case 15: // check if it wants to learn a new move
+ if (!IsTextPrinterActive(0))
+ {
+ HelpSystem_Enable();
+ var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove);
+ if (var != 0 && !gTasks[taskId].tEvoWasStopped)
+ {
+ u8 text[20];
+
+ StopMapMusic();
+ Overworld_PlaySpecialMapMusic();
+ gTasks[taskId].tBits |= TASK_BIT_LEARN_MOVE;
+ gTasks[taskId].tLearnsFirstMove = FALSE;
+ gTasks[taskId].tLearnMoveState = 0;
+ GetMonData(mon, MON_DATA_NICKNAME, text);
+ StringCopy10(gBattleTextBuff1, text);
+
+ if (var == MON_HAS_MAX_MOVES)
+ gTasks[taskId].tState = 22;
+ else if (var == MON_ALREADY_KNOWS_MOVE)
+ break;
+ else
+ gTasks[taskId].tState = 20; // move has been learned
+ }
+ else // no move to learn
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ gTasks[taskId].tState++;
+ }
+ }
+ break;
+ case 16: // task has finished, return
+ if (!gPaletteFade.active)
+ {
+ if (!(gTasks[taskId].tBits & TASK_BIT_LEARN_MOVE))
+ {
+ StopMapMusic();
+ Overworld_PlaySpecialMapMusic();
+ }
+ if (!gTasks[taskId].tEvoWasStopped)
+ CreateShedinja(gTasks[taskId].tPreEvoSpecies, mon);
+
+ DestroyTask(taskId);
+ FreeMonSpritesGfx();
+ Free(sEvoStructPtr);
+ sEvoStructPtr = NULL;
+ FreeAllWindowBuffers();
+ SetMainCallback2(gCB2_AfterEvolution);
+ }
+ break;
+ case 17: // evolution has been canceled, stop music and re-fade palette
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ m4aMPlayAllStop();
+ BeginNormalPaletteFade(0x6001C, 0, 0x10, 0, RGB_WHITE);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 18: // animate pokemon trying to evolve again, evolution has been stopped
+ if (!gPaletteFade.active)
+ {
+ PlayCry1(gTasks[taskId].tPreEvoSpecies, 0);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 19: // after the animation, print the string 'WHOA IT DId NOT EVOLVE!!!'
+ if (IsCryFinished())
+ {
+ if (gTasks[taskId].tEvoWasStopped)
+ StringExpandPlaceholders(gStringVar4, gText_EllipsisQuestionMark);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_PkmnStoppedEvolving);
+
+ BattlePutTextOnWindow(gStringVar4, 0);
+ gTasks[taskId].tEvoWasStopped = TRUE;
+ gTasks[taskId].tState = 15;
+ }
+ break;
+ case 20: // pokemon learned a new move, print string and play a fanfare
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BufferMoveToLearnIntoBattleTextBuff2();
+ PlayFanfare(MUS_FANFA1);
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tLearnsFirstMove = 0x40; // re-used as a counter
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 21: // wait a bit and check if can learn another move
+ if (!IsTextPrinterActive(0) && !IsSEPlaying() && --gTasks[taskId].tLearnsFirstMove == 0)
+ gTasks[taskId].tState = 15;
+ break;
+ case 22: // try to learn a new move
+ switch (gTasks[taskId].tLearnMoveState)
+ {
+ case 0:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BufferMoveToLearnIntoBattleTextBuff2();
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 1:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 2:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tData7 = 5;
+ gTasks[taskId].tData8 = 10;
+ gTasks[taskId].tLearnMoveState++;
+ }
+ case 3:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, 0);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xE);
+ gTasks[taskId].tLearnMoveState++;
+ sEvoCursorPos = 0;
+ BattleCreateYesNoCursorAt();
+ }
+ break;
+ case 4:
+ if (JOY_NEW(DPAD_UP) && sEvoCursorPos != 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt();
+ sEvoCursorPos = 0;
+ BattleCreateYesNoCursorAt();
+ }
+ if (JOY_NEW(DPAD_DOWN) && sEvoCursorPos == 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt();
+ sEvoCursorPos = 1;
+ BattleCreateYesNoCursorAt();
+ }
+ if (JOY_NEW(A_BUTTON))
+ {
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ PlaySE(SE_SELECT);
+
+ if (sEvoCursorPos != 0)
+ {
+ gTasks[taskId].tLearnMoveState = gTasks[taskId].tData8;
+ }
+ else
+ {
+ gTasks[taskId].tLearnMoveState = gTasks[taskId].tData7;
+ if (gTasks[taskId].tLearnMoveState == 5)
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ }
+ }
+ if (JOY_NEW(B_BUTTON))
+ {
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ PlaySE(SE_SELECT);
+ gTasks[taskId].tLearnMoveState = gTasks[taskId].tData8;
+ }
+ break;
+ case 5:
+ if (!gPaletteFade.active)
+ {
+ FreeAllWindowBuffers();
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gTasks[taskId].tPartyId,
+ gPlayerPartyCount - 1, CB2_EvolutionSceneLoadGraphics,
+ gMoveToLearn);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 6:
+ if (!gPaletteFade.active && gMain.callback2 == CB2_EvolutionSceneUpdate)
+ {
+ var = GetMoveSlotToReplace();
+ if (var == MAX_MON_MOVES)
+ {
+ gTasks[taskId].tLearnMoveState = 10;
+ }
+ else
+ {
+ u16 move = GetMonData(mon, var + MON_DATA_MOVE1);
+ if (IsHMMove2(move))
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tLearnMoveState = 12;
+ }
+ else
+ {
+ PREPARE_MOVE_BUFFER(gBattleTextBuff2, move)
+
+ RemoveMonPPBonus(mon, var);
+ SetMonMoveSlot(mon, gMoveToLearn, var);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ }
+ }
+ break;
+ case 7:
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tLearnMoveState++;
+ break;
+ case 8:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 9:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tState = 20;
+ }
+ break;
+ case 10:
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tData7 = 11;
+ gTasks[taskId].tData8 = 0;
+ gTasks[taskId].tLearnMoveState = 3;
+ break;
+ case 11:
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tState = 15;
+ break;
+ case 12:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ gTasks[taskId].tLearnMoveState = 5;
+ break;
+ }
+ break;
+ }
+}
+
+static void Task_TradeEvolutionScene(u8 taskId)
+{
+ u32 var = 0;
+ struct Pokemon* mon = &gPlayerParty[gTasks[taskId].tPartyId];
+
+ // Automatically cancel if the Pokemon would evolve into a species you have not
+ // yet unlocked, such as Crobat.
+ if (!IsNationalPokedexEnabled()
+ && gTasks[taskId].tState == 7
+ && gTasks[taskId].tPostEvoSpecies > SPECIES_MEW)
+ {
+ gTasks[taskId].tState = 15;
+ gTasks[taskId].tEvoWasStopped = TRUE;
+ if (gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ gTasks[sEvoGraphicsTaskId].EvoGraphicsTaskEvoStop = TRUE;
+ DestroyMovingBackgroundTasks();
+ }
+ }
+
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnIsEvolving);
+ DrawTextOnTradeWindow(0, gStringVar4, 1);
+ gTasks[taskId].tState++;
+ break;
+ case 1:
+ if (!IsTextPrinterActive(0))
+ {
+ PlayCry1(gTasks[taskId].tPreEvoSpecies, 0);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 2:
+ if (IsCryFinished())
+ {
+ m4aSongNumStop(MUS_SHINKA);
+ PlaySE(MUS_ME_SHINKA);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 3:
+ if (!IsSEPlaying())
+ {
+ PlayBGM(MUS_SHINKA);
+ gTasks[taskId].tState++;
+ BeginNormalPaletteFade(0x1C, 4, 0, 0x10, RGB_BLACK);
+ }
+ break;
+ case 4:
+ if (!gPaletteFade.active)
+ {
+ InitMovingBackgroundTask(TRUE);
+ var = gSprites[sEvoStructPtr->preEvoSpriteId].oam.paletteNum + 16;
+ sEvoGraphicsTaskId = LaunchTask_PreEvoSparklesSet1(var);
+ gTasks[taskId].tState++;
+ SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6));
+ }
+ break;
+ case 5:
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ gTasks[taskId].tState++;
+ sEvoStructPtr->field_3 = 1;
+ sEvoGraphicsTaskId = LaunchTask_PreEvoSparklesSet2();
+ }
+ break;
+ case 6:
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ sEvoGraphicsTaskId = LaunchTask_PrePostEvoMonSprites(sEvoStructPtr->preEvoSpriteId, sEvoStructPtr->postEvoSpriteId);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 7:
+ if (--sEvoStructPtr->field_3 == 0)
+ {
+ sEvoStructPtr->field_3 = 3;
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 8:
+ sEvoGraphicsTaskId = LaunchTask_PostEvoSparklesSet1();
+ gTasks[taskId].tState++;
+ break;
+ case 9:
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ sEvoGraphicsTaskId = LaunchTask_PostEvoSparklesSet2AndFlash_Trade(gTasks[taskId].tPostEvoSpecies);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 10:
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ PlaySE(SE_EXP);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 11:
+ /*
+ * BUG: This check causes the evolved Pokemon's cry to play over the sfx.
+ * Negate the below condition.
+ */
+ if (IsSEPlaying())
+ {
+// Free(sEvoMovingBgPtr);
+ PlayCry1(gTasks[taskId].tPostEvoSpecies, 0);
+ memcpy(&gPlttBufferUnfaded[0x20], sEvoStructPtr->savedPalette, 0x60);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 12:
+ if (IsCryFinished())
+ {
+ StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
+ DrawTextOnTradeWindow(0, gStringVar4, 1);
+ PlayFanfare(MUS_FANFA5);
+ gTasks[taskId].tState++;
+ SetMonData(mon, MON_DATA_SPECIES, (&gTasks[taskId].tPostEvoSpecies));
+ CalculateMonStats(mon);
+ EvolutionRenameMon(mon, gTasks[taskId].tPreEvoSpecies, gTasks[taskId].tPostEvoSpecies);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_SEEN);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_CAUGHT);
+ IncrementGameStat(GAME_STAT_EVOLVED_POKEMON);
+ }
+ break;
+ case 13:
+ if (!IsTextPrinterActive(0) && IsFanfareTaskInactive() == TRUE)
+ {
+ var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove);
+ if (var != 0 && !gTasks[taskId].tEvoWasStopped)
+ {
+ u8 text[20];
+
+ gTasks[taskId].tBits |= TASK_BIT_LEARN_MOVE;
+ gTasks[taskId].tLearnsFirstMove = FALSE;
+ gTasks[taskId].tLearnMoveState = 0;
+ GetMonData(mon, MON_DATA_NICKNAME, text);
+ StringCopy10(gBattleTextBuff1, text);
+
+ if (var == MON_HAS_MAX_MOVES)
+ gTasks[taskId].tState = 20;
+ else if (var == MON_ALREADY_KNOWS_MOVE)
+ break;
+ else
+ gTasks[taskId].tState = 18;
+ }
+ else
+ {
+ PlayBGM(MUS_SHINKA);
+ DrawTextOnTradeWindow(0, gText_CommunicationStandby5, 1);
+ gTasks[taskId].tState++;
+ }
+ }
+ break;
+ case 14:
+ if (!IsTextPrinterActive(0))
+ {
+ DestroyTask(taskId);
+ Free(sEvoStructPtr);
+ sEvoStructPtr = NULL;
+ gTextFlags.useAlternateDownArrow = FALSE;
+ SetMainCallback2(gCB2_AfterEvolution);
+ }
+ break;
+ case 15:
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ m4aMPlayAllStop();
+ BeginNormalPaletteFade((1 << (gSprites[sEvoStructPtr->preEvoSpriteId].oam.paletteNum + 16)) | (0x4001C), 0, 0x10, 0, RGB_WHITE);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 16:
+ if (!gPaletteFade.active)
+ {
+ PlayCry1(gTasks[taskId].tPreEvoSpecies, 0);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 17:
+ if (IsCryFinished())
+ {
+ StringExpandPlaceholders(gStringVar4, gText_EllipsisQuestionMark);
+ DrawTextOnTradeWindow(0, gStringVar4, 1);
+ gTasks[taskId].tEvoWasStopped = TRUE;
+ gTasks[taskId].tState = 13;
+ }
+ break;
+ case 18:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BufferMoveToLearnIntoBattleTextBuff2();
+ PlayFanfare(MUS_FANFA1);
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnsFirstMove = 0x40; // re-used as a counter
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 19:
+ if (!IsTextPrinterActive(0) && IsFanfareTaskInactive() == TRUE && --gTasks[taskId].tLearnsFirstMove == 0)
+ gTasks[taskId].tState = 13;
+ break;
+ case 20:
+ switch (gTasks[taskId].tLearnMoveState)
+ {
+ case 0:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BufferMoveToLearnIntoBattleTextBuff2();
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 1:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 2:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tData7 = 5;
+ gTasks[taskId].tData8 = 9;
+ gTasks[taskId].tLearnMoveState++;
+ }
+ case 3:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ LoadUserWindowBorderGfx(0, 0xA8, 0xE0);
+ CreateYesNoMenu(&gTradeEvolutionSceneYesNoWindowTemplate, 3, 0, 2, 0xA8, 0xE, 0);
+ sEvoCursorPos = 0;
+ gTasks[taskId].tLearnMoveState++;
+ sEvoCursorPos = 0;
+ }
+ break;
+ case 4:
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ sEvoCursorPos = 0;
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState = gTasks[taskId].tData7;
+ if (gTasks[taskId].tLearnMoveState == 5)
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ break;
+ case 1:
+ case -1:
+ sEvoCursorPos = 1;
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState = gTasks[taskId].tData8;
+ break;
+ }
+ break;
+ case 5:
+ if (!gPaletteFade.active)
+ {
+ if (gWirelessCommType)
+ DestroyWirelessStatusIndicatorSprite();
+
+ Free(GetBgTilemapBuffer(3));
+ Free(GetBgTilemapBuffer(1));
+ Free(GetBgTilemapBuffer(0));
+ FreeAllWindowBuffers();
+
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gTasks[taskId].tPartyId,
+ gPlayerPartyCount - 1, CB2_TradeEvolutionSceneLoadGraphics,
+ gMoveToLearn);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 6:
+ if (!gPaletteFade.active && gMain.callback2 == CB2_TradeEvolutionSceneUpdate)
+ {
+ var = GetMoveSlotToReplace();
+ if (var == MAX_MON_MOVES)
+ {
+ gTasks[taskId].tLearnMoveState = 9;
+ }
+ else
+ {
+ u16 move = GetMonData(mon, var + MON_DATA_MOVE1);
+ if (IsHMMove2(move))
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState = 11;
+ }
+ else
+ {
+ PREPARE_MOVE_BUFFER(gBattleTextBuff2, move)
+
+ RemoveMonPPBonus(mon, var);
+ SetMonMoveSlot(mon, gMoveToLearn, var);
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ }
+ }
+ break;
+ case 7:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 8:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tState = 18;
+ }
+ break;
+ case 9:
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tData7 = 10;
+ gTasks[taskId].tData8 = 0;
+ gTasks[taskId].tLearnMoveState = 3;
+ break;
+ case 10:
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tState = 13;
+ break;
+ case 11:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ gTasks[taskId].tLearnMoveState = 5;
+ break;
+ }
+ break;
+ }
+}
+
+#undef tState
+#undef tPreEvoSpecies
+#undef tPostEvoSpecies
+#undef tCanStop
+#undef tBits
+#undef tLearnsFirstMove
+#undef tLearnMoveState
+#undef tData7
+#undef tData8
+#undef tEvoWasStopped
+#undef tPartyId
+
+static void EvoDummyFunc(void)
+{
+}
+
+static void VBlankCB_EvolutionScene(void)
+{
+ SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X);
+ SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y);
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X);
+ SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y);
+ SetGpuReg(REG_OFFSET_BG3HOFS, gBattle_BG3_X);
+ SetGpuReg(REG_OFFSET_BG3VOFS, gBattle_BG3_Y);
+
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ ScanlineEffect_InitHBlankDmaTransfer();
+}
+
+static void VBlankCB_TradeEvolutionScene(void)
+{
+ SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X);
+ SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y);
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X);
+ SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y);
+ SetGpuReg(REG_OFFSET_BG3HOFS, gBattle_BG3_X);
+ SetGpuReg(REG_OFFSET_BG3VOFS, gBattle_BG3_Y);
+
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ ScanlineEffect_InitHBlankDmaTransfer();
+}
+
+static void Task_MovingBackgroundPalettes(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[6] != 0)
+ return;
+ if (data[5]++ < 20)
+ return;
+
+ if (data[0]++ > sMovingBackgroundTimers[data[2]][3])
+ {
+ if (sMovingBackgroundTimers[data[2]][1] == data[1])
+ {
+ data[3]++;
+ if (data[3] == sMovingBackgroundTimers[data[2]][2])
+ {
+ data[3] = 0;
+ data[2]++;
+ }
+ data[1] = sMovingBackgroundTimers[data[2]][0];
+ }
+ else
+ {
+ LoadPalette(&sEvoMovingBgPtr[data[1] * 16], 0xA0, 0x20);
+ data[0] = 0;
+ data[1]++;
+ }
+ }
+
+ if (data[2] == 4)
+ DestroyTask(taskId);
+}
+
+static void LaunchTask_MovingBackgroundPos(bool8 isLink)
+{
+ u8 taskId = CreateTask(Task_MovingBackgroundPos, 7);
+
+ if (!isLink)
+ gTasks[taskId].data[2] = 0;
+ else
+ gTasks[taskId].data[2] = 1;
+}
+
+static void Task_MovingBackgroundPos(u8 taskId)
+{
+ u16 *outer_X, *outer_Y;
+
+ u16 *inner_X = &gBattle_BG1_X;
+ u16 *inner_Y = &gBattle_BG1_Y;
+
+ if (!gTasks[taskId].data[2])
+ {
+ outer_X = &gBattle_BG2_X;
+ outer_Y = &gBattle_BG2_Y;
+ }
+ else
+ {
+ outer_X = &gBattle_BG3_X;
+ outer_Y = &gBattle_BG3_Y;
+ }
+
+ gTasks[taskId].data[0] = (gTasks[taskId].data[0] + 5) & 0xFF;
+ gTasks[taskId].data[1] = (gTasks[taskId].data[0] + 0x80) & 0xFF;
+
+ *inner_X = Cos(gTasks[taskId].data[0], 4) + 8;
+ *inner_Y = Sin(gTasks[taskId].data[0], 4) + 16;
+
+ *outer_X = Cos(gTasks[taskId].data[1], 4) + 8;
+ *outer_Y = Sin(gTasks[taskId].data[1], 4) + 16;
+
+ if (!FuncIsActiveTask(Task_MovingBackgroundPalettes))
+ {
+ DestroyTask(taskId);
+
+ *inner_X = 0;
+ *inner_Y = 0;
+
+ *outer_X = 256;
+ *outer_Y = 0;
+ }
+}
+
+static void InitMovingBgValues(u16 *movingBgs)
+{
+ s32 i, j;
+
+ for (i = 0; i < 50; i++)
+ {
+ for (j = 0; j < 16; j++)
+ {
+ movingBgs[i * 16 + j] = sMovingBgPals[sMovingBgPalIndices[i][j]];
+ }
+ }
+}
+
+static void InitMovingBackgroundTask(bool8 isLink)
+{
+ u8 innerBgId, outerBgId;
+
+ sEvoMovingBgPtr = AllocZeroed(0x640);
+ InitMovingBgValues(sEvoMovingBgPtr);
+
+ if (!isLink)
+ innerBgId = 1, outerBgId = 2;
+ else
+ innerBgId = 1, outerBgId = 3;
+
+ LoadPalette(sBlackPalette, 0xA0, 0x20);
+
+ DecompressAndLoadBgGfxUsingHeap(1, sMovingBackgroundTiles, FALSE, 0, 0);
+ CopyToBgTilemapBuffer(1, sMovingBackgroundMap1, 0, 0);
+ CopyToBgTilemapBuffer(outerBgId, sMovingBackgroundMap2, 0, 0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(outerBgId);
+
+ if (!isLink)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG2);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8));
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG2_ON | DISPCNT_BG1_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP);
+
+ SetBgAttribute(innerBgId, BG_ATTR_PRIORITY, 2);
+ SetBgAttribute(outerBgId, BG_ATTR_PRIORITY, 2);
+
+ ShowBg(1);
+ ShowBg(2);
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8));
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG3_ON | DISPCNT_BG1_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP);
+ }
+
+ CreateTask(Task_MovingBackgroundPalettes, 5);
+ LaunchTask_MovingBackgroundPos(isLink);
+}
+
+void IsMovingBackgroundTaskRunning(void) // unused
+{
+ u8 taskId = FindTaskIdByFunc(Task_MovingBackgroundPalettes);
+
+ if (taskId != 0xFF)
+ gTasks[taskId].data[6] = 1;
+
+ FillPalette(RGB_BLACK, 0xA0, 0x20);
+}
+
+static void DestroyMovingBackgroundTasks(void)
+{
+ u8 taskId;
+
+ if ((taskId = FindTaskIdByFunc(Task_MovingBackgroundPalettes)) != 0xFF)
+ DestroyTask(taskId);
+ if ((taskId = FindTaskIdByFunc(Task_MovingBackgroundPos)) != 0xFF)
+ DestroyTask(taskId);
+
+ FillPalette(RGB_BLACK, 0xA0, 0x20);
+ ResetBgRegsAfterMovingBackgroundCancel();
+}
+
+static void ResetBgRegsAfterMovingBackgroundCancel(void)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ SetBgAttribute(1, BG_ATTR_PRIORITY, GetBattleBgAttribute(1, 5));
+ SetBgAttribute(2, BG_ATTR_PRIORITY, GetBattleBgAttribute(2, 5));
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG3_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP);
+ Free(sEvoMovingBgPtr);
+}
diff --git a/src/ice.c b/src/ice.c
index 9914a6992..79966e597 100644
--- a/src/ice.c
+++ b/src/ice.c
@@ -135,7 +135,7 @@ static const union AnimCmd *const gUnknown_83E632C[] =
gUnknown_83E6308,
};
-static const union AnimCmd *const gUnknown_83E6330[] =
+const union AnimCmd *const gUnknown_83E6330[] =
{
gUnknown_83E6310,
};
diff --git a/src/item_pc.c b/src/item_pc.c
index 8569844b9..60a74ac59 100644
--- a/src/item_pc.c
+++ b/src/item_pc.c
@@ -384,7 +384,7 @@ static bool8 ItemPc_DoGfxSetup(void)
gMain.state++;
break;
case 20:
- if (sub_80BF72C() != TRUE)
+ if ((u8)sub_80BF72C() != TRUE)
gMain.state++;
break;
default:
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
index 06e7bb08b..f17bff0d0 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -125,17 +125,17 @@ bool8 MenuHelpers_LinkSomething(void)
return FALSE;
}
-bool8 sub_80BF72C(void)
+bool32 sub_80BF72C(void)
{
if (!MenuHelpers_LinkSomething())
return FALSE;
else
- return sub_8058244();
+ return (u8)sub_8058244();
}
bool8 sub_80BF748(void)
{
- if (sub_80BF72C() == TRUE)
+ if ((u8)sub_80BF72C() == TRUE)
return TRUE;
else if (sub_800B270() != TRUE)
return FALSE;
diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c
index 84befe63e..f879e6810 100644
--- a/src/new_menu_helpers.c
+++ b/src/new_menu_helpers.c
@@ -21,11 +21,13 @@
#define STD_WINDOW_PALETTE_NUM 14
#define STD_WINDOW_BASE_TILE_NUM 0x214
-static EWRAM_DATA bool8 gUnknown_203AB58[4] = {FALSE}; // knizz: bgmaps_that_need_syncing
-static EWRAM_DATA u16 gUnknown_203AB5C = {0};
-static EWRAM_DATA void *gUnknown_203AB60[0x20] = {NULL};
+static EWRAM_DATA bool8 sScheduledBgCopiesToVram[4] = {FALSE};
+static EWRAM_DATA u16 sTempTileDataBufferCursor = {0};
+static EWRAM_DATA void *sTempTileDataBuffers[0x20] = {NULL};
static EWRAM_DATA u8 sStartMenuWindowId = {0};
+static const u16 gUnknown_841EF48[] = INCBIN_U16("graphics/unknown/unk_841EF48.4bpp");
+
const u16 gUnknown_841F1C8[] = INCBIN_U16("graphics/text_window/unk_841F1C8.4bpp");
const u16 gTMCaseMainWindowPalette[] = INCBIN_U16("graphics/tm_case/unk_841F408.gbapal");
@@ -169,35 +171,35 @@ static void TaskFreeBufAfterCopyingTileDataToVram(u8 taskId);
void ClearScheduledBgCopiesToVram(void)
{
- memset(gUnknown_203AB58, 0, sizeof(gUnknown_203AB58));
+ memset(sScheduledBgCopiesToVram, 0, sizeof(sScheduledBgCopiesToVram));
}
void ScheduleBgCopyTilemapToVram(u8 bgId)
{
- gUnknown_203AB58[bgId] = TRUE;
+ sScheduledBgCopiesToVram[bgId] = TRUE;
}
void DoScheduledBgTilemapCopiesToVram(void)
{
- if (gUnknown_203AB58[0] == TRUE)
+ if (sScheduledBgCopiesToVram[0] == TRUE)
{
CopyBgTilemapBufferToVram(0);
- gUnknown_203AB58[0] = FALSE;
+ sScheduledBgCopiesToVram[0] = FALSE;
}
- if (gUnknown_203AB58[1] == TRUE)
+ if (sScheduledBgCopiesToVram[1] == TRUE)
{
CopyBgTilemapBufferToVram(1);
- gUnknown_203AB58[1] = FALSE;
+ sScheduledBgCopiesToVram[1] = FALSE;
}
- if (gUnknown_203AB58[2] == TRUE)
+ if (sScheduledBgCopiesToVram[2] == TRUE)
{
CopyBgTilemapBufferToVram(2);
- gUnknown_203AB58[2] = FALSE;
+ sScheduledBgCopiesToVram[2] = FALSE;
}
- if (gUnknown_203AB58[3] == TRUE)
+ if (sScheduledBgCopiesToVram[3] == TRUE)
{
CopyBgTilemapBufferToVram(3);
- gUnknown_203AB58[3] = FALSE;
+ sScheduledBgCopiesToVram[3] = FALSE;
}
}
@@ -205,11 +207,11 @@ void ResetTempTileDataBuffers(void)
{
int i;
- for (i = 0; i < (s32)NELEMS(gUnknown_203AB60); i++)
+ for (i = 0; i < (s32)NELEMS(sTempTileDataBuffers); i++)
{
- gUnknown_203AB60[i] = NULL;
+ sTempTileDataBuffers[i] = NULL;
}
- gUnknown_203AB5C = 0;
+ sTempTileDataBufferCursor = 0;
}
bool8 FreeTempTileDataBuffersIfPossible(void)
@@ -218,13 +220,13 @@ bool8 FreeTempTileDataBuffersIfPossible(void)
if (!IsDma3ManagerBusyWithBgCopy())
{
- if (gUnknown_203AB5C)
+ if (sTempTileDataBufferCursor)
{
- for (i = 0; i < gUnknown_203AB5C; i++)
+ for (i = 0; i < sTempTileDataBufferCursor; i++)
{
- FREE_AND_SET_NULL(gUnknown_203AB60[i]);
+ FREE_AND_SET_NULL(sTempTileDataBuffers[i]);
}
- gUnknown_203AB5C = 0;
+ sTempTileDataBufferCursor = 0;
}
return FALSE;
}
@@ -238,7 +240,7 @@ void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 of
{
u32 sizeOut;
- if (gUnknown_203AB5C < NELEMS(gUnknown_203AB60))
+ if (sTempTileDataBufferCursor < NELEMS(sTempTileDataBuffers))
{
void *ptr = MallocAndDecompress(src, &sizeOut);
if (!size)
@@ -246,7 +248,7 @@ void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 of
if (ptr)
{
CopyDecompressedTileDataToVram(bgId, ptr, size, offset, mode);
- gUnknown_203AB60[gUnknown_203AB5C++] = ptr;
+ sTempTileDataBuffers[sTempTileDataBufferCursor++] = ptr;
}
return ptr;
}
@@ -257,7 +259,7 @@ void *DecompressAndCopyTileDataToVram2(u8 bgId, const void *src, u32 size, u16 o
{
u32 sizeOut;
- if (gUnknown_203AB5C < NELEMS(gUnknown_203AB60))
+ if (sTempTileDataBufferCursor < NELEMS(sTempTileDataBuffers))
{
void *ptr = MallocAndDecompress(src, &sizeOut);
if (sizeOut > size)
@@ -265,7 +267,7 @@ void *DecompressAndCopyTileDataToVram2(u8 bgId, const void *src, u32 size, u16 o
if (ptr)
{
CopyDecompressedTileDataToVram(bgId, ptr, sizeOut, offset, mode);
- gUnknown_203AB60[gUnknown_203AB5C++] = ptr;
+ sTempTileDataBuffers[sTempTileDataBufferCursor++] = ptr;
}
return ptr;
}
diff --git a/src/option_menu.c b/src/option_menu.c
index 8450633f5..35fe957be 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -29,16 +29,51 @@ enum
MENUITEM_BUTTONMODE,
MENUITEM_FRAMETYPE,
MENUITEM_CANCEL,
- MENUITEM_COUNT,
+ MENUITEM_COUNT
};
+
// Window Ids
enum
{
WIN_TEXT_OPTION,
- WIN_OPTIONS,
+ WIN_OPTIONS
+};
+
+// RAM symbols
+struct OptionMenu
+{
+ /*0x00*/ u16 option[MENUITEM_COUNT];
+ /*0x0E*/ u16 unkE;
+ /*0x10*/ u8 state3;
+ /*0x11*/ u8 state;
+ /*0x12*/ u8 state2;
+ /*0x13*/ u8 unk13;
};
-static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8
+static EWRAM_DATA struct OptionMenu *sOptionMenuPtr = NULL;
+
+//Function Declarataions
+static void CB2_InitOptionMenu(void);
+static void VBlankCB_OptionMenu(void);
+static void OptionMenu_InitCallbacks(void);
+static void OptionMenu_SetVBlankCallback(void);
+static void CB2_OptionMenu(void);
+static void SetOptionMenuTask(void);
+static void InitOptionMenuBg(void);
+static void OptionMenu_PickSwitchCancel(void);
+static void OptionMenu_ResetSpriteData(void);
+static bool8 LoadOptionMenuPalette(void);
+static void Task_OptionMenu(u8 taskId);
+static u8 OptionMenu_ProcessInput(void);
+static void BufferOptionMenuString(u8 selection);
+static void CloseAndSaveOptionMenu(u8 taskId);
+static void PrintOptionMenuHeader(void);
+static void sub_8088C0C(void);
+static void LoadOptionMenuItemNames(void);
+static void sub_8088DE0(u16 selection);
+
+// Data Definitions
+static const struct WindowTemplate sOptionMenuWinTemplates[] =
{
{
.bg = 1,
@@ -47,7 +82,7 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8
.width = 26,
.height = 2,
.paletteNum = 1,
- .baseBlock = 2,
+ .baseBlock = 2
},
{
.bg = 0,
@@ -56,7 +91,7 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8
.width = 26,
.height = 12,
.paletteNum = 1,
- .baseBlock = 0x36,
+ .baseBlock = 0x36
},
{
.bg = 2,
@@ -65,11 +100,12 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8
.width = 30,
.height = 2,
.paletteNum = 0xF,
- .baseBlock = 0x16e,
+ .baseBlock = 0x16e
},
- DUMMY_WIN_TEMPLATE,
+ DUMMY_WIN_TEMPLATE
};
-static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8
+
+static const struct BgTemplate sOptionMenuBgTemplates[] =
{
{
.bg = 1,
@@ -78,7 +114,7 @@ static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8
.screenSize = 0,
.paletteMode = 0,
.priority = 0,
- .baseTile = 0,
+ .baseTile = 0
},
{
.bg = 0,
@@ -87,7 +123,7 @@ static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8
.screenSize = 0,
.paletteMode = 0,
.priority = 1,
- .baseTile = 0,
+ .baseTile = 0
},
{
.bg = 2,
@@ -96,12 +132,14 @@ static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8
.screenSize = 0,
.paletteMode = 0,
.priority = 2,
- .baseTile = 0,
+ .baseTile = 0
},
};
-static const u16 sOptionsMenuPalette[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4
-static const u16 sOptionsMenuItemCounts[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //3CC304
-static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = //3CC314
+
+static const u16 sOptionMenuPalette[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal");
+static const u16 sOptionMenuItemCounts[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0};
+
+static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] =
{
[MENUITEM_TEXTSPEED] = gText_TextSpeed,
[MENUITEM_BATTLESCENE] = gText_BattleScene,
@@ -111,73 +149,44 @@ static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = //3CC314
[MENUITEM_FRAMETYPE] = gText_Frame,
[MENUITEM_CANCEL] = gText_OptionMenuCancel,
};
-static const u8 *const sTextSpeedOptions[] = //3CC330
+
+static const u8 *const sTextSpeedOptions[] =
{
gText_TextSpeedSlow,
gText_TextSpeedMid,
gText_TextSpeedFast
};
-static const u8 *const sBattleSceneOptions[] = //3CC33C
+
+static const u8 *const sBattleSceneOptions[] =
{
gText_BattleSceneOn,
gText_BattleSceneOff
};
-static const u8 *const sBattleStyleOptions[] = //3CC344
+
+static const u8 *const sBattleStyleOptions[] =
{
gText_BattleStyleShift,
gText_BattleStyleSet
};
-static const u8 *const sSoundOptions[] = //3CC34C
+
+static const u8 *const sSoundOptions[] =
{
gText_SoundMono,
gText_SoundStereo
};
-static const u8 *const sButtonTypeOptions[] = //3CC354
-{
- gText_ButtonTypeNormal,
- gText_ButtonTypeLEqualsA,
- gText_ButtonTypeLR,
-};
-static const u8 sOptionsMenuPickSwitchCancelTextColor[] = {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; //3CC360
-static const u8 sOptionsMenuTextColor[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED}; //3CC363
-
-
-//This file's functions
-static void sub_808835C(void);
-static void sub_8088374(void);
-static void sub_8088430(void);
-static void sub_8088444(void);
-static void sub_8088454(void);
-static void sub_8088514(void);
-static void sub_8088530(void);
-static void sub_8088680(void);
-static void sub_80886D4(void);
-static bool8 sub_80886F0(void);
-static void sub_8088780(u8 taskId);
-static u8 sub_80888C0(void);
-static void sub_80889A8(u8 selection);
-static void sub_8088B00(u8 taskId);
-static void sub_8088BD0(void);
-static void sub_8088C0C(void);
-static void sub_8088D8C(void);
-static void sub_8088DE0(u16 selection);
-struct OptionsMenu
+static const u8 *const sButtonTypeOptions[] =
{
- /*0x00*/ u16 option[MENUITEM_COUNT]; //0,2,4,6,8,a,c
- /*0x0E*/ u16 unkE;
- /*0x10*/ u8 state3;
- /*0x11*/ u8 state;
- /*0x12*/ u8 state2;
- /*0x13*/ u8 unk13;
+ gText_ButtonTypeHelp,
+ gText_ButtonTypeLR,
+ gText_ButtonTypeLEqualsA
};
-EWRAM_DATA struct OptionsMenu *sOptionsMenuPtr = {0};
+static const u8 sOptionMenuPickSwitchCancelTextColor[] = {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY};
+static const u8 sOptionMenuTextColor[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED};
-
-
-//CB2_InitOptionsMenu
-static void sub_808835C(void)
+// Functions
+static void CB2_InitOptionMenu(void)
{
RunTasks();
AnimateSprites();
@@ -185,123 +194,111 @@ static void sub_808835C(void)
UpdatePaletteFade();
}
-
-//VBlankCB_OptionsMenu
-static void sub_8088374(void)
+static void VBlankCB_OptionMenu(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-
-//sub_8088388
void CB2_OptionsMenuFromStartMenu(void)
{
u8 i;
if (gMain.savedCallback == NULL)
gMain.savedCallback = CB2_ReturnToStartMenu;
- sOptionsMenuPtr = AllocZeroed(sizeof(struct OptionsMenu));
- sOptionsMenuPtr->state3 = 0;
- sOptionsMenuPtr->state2 = 0;
- sOptionsMenuPtr->state = 0;
- sOptionsMenuPtr->unkE = 0;
- sOptionsMenuPtr->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed;
- sOptionsMenuPtr->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff;
- sOptionsMenuPtr->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle;
- sOptionsMenuPtr->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound;
- sOptionsMenuPtr->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode;
- sOptionsMenuPtr->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType;
+ sOptionMenuPtr = AllocZeroed(sizeof(struct OptionMenu));
+ sOptionMenuPtr->state3 = 0;
+ sOptionMenuPtr->state2 = 0;
+ sOptionMenuPtr->state = 0;
+ sOptionMenuPtr->unkE = 0;
+ sOptionMenuPtr->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed;
+ sOptionMenuPtr->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff;
+ sOptionMenuPtr->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle;
+ sOptionMenuPtr->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound;
+ sOptionMenuPtr->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode;
+ sOptionMenuPtr->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType;
- for (i = 0; i < MENUITEM_COUNT-1; i++)
+ for (i = 0; i < MENUITEM_COUNT - 1; i++)
{
- if (sOptionsMenuPtr->option[i] > (sOptionsMenuItemCounts[i])-1)
- sOptionsMenuPtr->option[i] = 0;
+ if (sOptionMenuPtr->option[i] > (sOptionMenuItemCounts[i]) - 1)
+ sOptionMenuPtr->option[i] = 0;
}
HelpSystem_SetSomeVariable2(0xD);
- SetMainCallback2(sub_8088454);
+ SetMainCallback2(CB2_OptionMenu);
}
-
-//sub_8088430
-static void sub_8088430(void)
+static void OptionMenu_InitCallbacks(void)
{
- SetVBlankCallback(0);
- SetHBlankCallback(0);
+ SetVBlankCallback(NULL);
+ SetHBlankCallback(NULL);
}
-
-//sub_8088444
-static void sub_8088444(void)
+static void OptionMenu_SetVBlankCallback(void)
{
- SetVBlankCallback(sub_8088374);
+ SetVBlankCallback(VBlankCB_OptionMenu);
}
-//sub_8088454
-static void sub_8088454(void)
+static void CB2_OptionMenu(void)
{
u8 i, state;
- state = sOptionsMenuPtr->state;
+ state = sOptionMenuPtr->state;
switch (state)
{
case 0:
- sub_8088430();
+ OptionMenu_InitCallbacks();
break;
case 1:
- sub_8088530();
+ InitOptionMenuBg();
break;
case 2:
- sub_80886D4();
+ OptionMenu_ResetSpriteData();
break;
case 3:
- if (sub_80886F0() != TRUE) //silly matching quirk
+ if (LoadOptionMenuPalette() != TRUE)
return;
break;
case 4:
- sub_8088BD0();
+ PrintOptionMenuHeader();
break;
case 5:
sub_8088C0C();
break;
case 6:
- sub_8088D8C();
+ LoadOptionMenuItemNames();
break;
case 7:
for (i = 0; i < MENUITEM_COUNT; i++)
- sub_80889A8(i);
+ BufferOptionMenuString(i);
break;
case 8:
- sub_8088DE0(sOptionsMenuPtr->unkE);
+ sub_8088DE0(sOptionMenuPtr->unkE);
break;
case 9:
- sub_8088680();
+ OptionMenu_PickSwitchCancel();
break;
default:
- sub_8088514();
+ SetOptionMenuTask();
+ break;
}
- sOptionsMenuPtr->state++;
+ sOptionMenuPtr->state++;
}
-//sub_8088514
-static void sub_8088514(void)
+static void SetOptionMenuTask(void)
{
- CreateTask(sub_8088780, 0);
- SetMainCallback2(sub_808835C);
+ CreateTask(Task_OptionMenu, 0);
+ SetMainCallback2(CB2_InitOptionMenu);
}
-
-//sub_8088530
-static void sub_8088530(void)
+static void InitOptionMenuBg(void)
{
- void * dest = (void *) VRAM;
- DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000);
-
+ void * dest = (void *)VRAM;
+ DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000);
DmaClear32(3, (void *)OAM, OAM_SIZE);
DmaClear16(3, (void *)PLTT, PLTT_SIZE);
- SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, sOptionMenuBgTemplates, ARRAY_COUNT(sOptionMenuBgTemplates));
+ InitBgsFromTemplates(0, sOptionMenuBgTemplates, NELEMS(sOptionMenuBgTemplates));
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
@@ -312,30 +309,27 @@ static void sub_8088530(void)
ChangeBgY(3, 0, 0);
InitWindows(sOptionMenuWinTemplates);
DeactivateAllTextPrinters();
- SetGpuReg(REG_OFFSET_BLDCNT, 0xC1);
- SetGpuReg(REG_OFFSET_BLDY, 2);
- SetGpuReg(REG_OFFSET_WININ, 1);
- SetGpuReg(REG_OFFSET_WINOUT, 0x27);
- SetGpuReg(0, 0x3040);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_EFFECT_LIGHTEN);
+ SetGpuReg(REG_OFFSET_BLDY, BLDCNT_TGT1_BG1);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON);
ShowBg(0);
ShowBg(1);
ShowBg(2);
};
-//sub_8088680
-static void sub_8088680(void)
+static void OptionMenu_PickSwitchCancel(void)
{
s32 x;
x = 0xE4 - GetStringWidth(0, gText_PickSwitchCancel, 0);
- FillWindowPixelBuffer(2, 0xFF);
- AddTextPrinterParameterized3(2, 0, x, 0, sOptionsMenuPickSwitchCancelTextColor, 0, gText_PickSwitchCancel);
+ FillWindowPixelBuffer(2, PIXEL_FILL(15));
+ AddTextPrinterParameterized3(2, 0, x, 0, sOptionMenuPickSwitchCancelTextColor, 0, gText_PickSwitchCancel);
PutWindowTilemap(2);
CopyWindowToVram(2, 3);
}
-
-//sub_80886D4
-static void sub_80886D4(void)
+static void OptionMenu_ResetSpriteData(void)
{
ResetSpriteData();
ResetPaletteFade();
@@ -344,19 +338,18 @@ static void sub_80886D4(void)
ScanlineEffect_Stop();
}
-//sub_80886F0
-static bool8 sub_80886F0(void)
+static bool8 LoadOptionMenuPalette(void)
{
- switch (sOptionsMenuPtr->state2)
+ switch (sOptionMenuPtr->state2)
{
case 0:
- LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA);
+ LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA);
break;
case 1:
- LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20);
+ LoadPalette(GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20);
break;
case 2:
- LoadPalette(sOptionsMenuPalette, 0x10, 0x20);
+ LoadPalette(sOptionMenuPalette, 0x10, 0x20);
LoadPalette(stdpal_get(2), 0xF0, 0x20);
break;
case 3:
@@ -365,266 +358,104 @@ static bool8 sub_80886F0(void)
default:
return TRUE;
}
- sOptionsMenuPtr->state2++;
+ sOptionMenuPtr->state2++;
return FALSE;
}
-
-
-// I could not get this function to match. GOTO statements weren't even compiling correctly.
-#ifdef NONMATCHING
-static void sub_8088780(u8 taskId)
+static void Task_OptionMenu(u8 taskId)
{
- u8 v2, v5;
- struct OptionsMenu v4;
-
- switch (sOptionsMenuPtr->state3)
+ switch (sOptionMenuPtr->state3)
{
case 0:
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- sub_8088444();
- sOptionsMenuPtr->state3++;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ OptionMenu_SetVBlankCallback();
+ sOptionMenuPtr->state3++;
break;
case 2:
- if ((bool32) sub_80BF72C() == TRUE) //cast to bool32 to remove the lsl/lsr 0x18 after func call
- return;
- switch (sub_80888C0())
+ if (sub_80BF72C() == TRUE)
+ break;
+ switch (OptionMenu_ProcessInput())
{
+ case 0:
+ break;
case 1:
- sOptionsMenuPtr->state3++;
+ sOptionMenuPtr->state3++;
break;
case 2:
- LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA);
- LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20);
- sub_80889A8(sOptionsMenuPtr->unkE);
- sOptionsMenuPtr->state3++;
+ LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA);
+ LoadPalette(GetUserFrameGraphicsInfo(sOptionMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20);
+ BufferOptionMenuString(sOptionMenuPtr->unkE);
break;
case 3:
- sub_8088DE0(sOptionsMenuPtr->unkE);
+ sub_8088DE0(sOptionMenuPtr->unkE);
break;
case 4:
- sub_80889A8(sOptionsMenuPtr->unkE);
- sOptionsMenuPtr->state3++;
+ BufferOptionMenuString(sOptionMenuPtr->unkE);
break;
- default:
- return;
}
+ break;
case 3:
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- sOptionsMenuPtr->state3++;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ sOptionMenuPtr->state3++;
+ break;
case 1:
case 4:
if (gPaletteFade.active)
return;
- sOptionsMenuPtr->state3++;
+ sOptionMenuPtr->state3++;
+ break;
case 5:
- sub_8088B00(taskId);
+ CloseAndSaveOptionMenu(taskId);
break;
- default:
- return;
}
}
-#else
-NAKED
-static void sub_8088780(u8 taskId)
-{
- asm_unified("\tpush {r4,lr}\n"
- "\tsub sp, 0x4\n"
- "\tlsls r0, 24\n"
- "\tlsrs r2, r0, 24\n"
- "\tldr r1, _080887A0 @ =sOptionsMenuPtr\n"
- "\tldr r0, [r1]\n"
- "\tldrb r0, [r0, 0x10]\n"
- "\tadds r3, r1, 0\n"
- "\tcmp r0, 0x5\n"
- "\tbls _08088796\n"
- "\tb _080888B6\n"
- "_08088796:\n"
- "\tlsls r0, 2\n"
- "\tldr r1, _080887A4 @ =_080887A8\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.align 2, 0\n"
- "_080887A0: .4byte sOptionsMenuPtr\n"
- "_080887A4: .4byte _080887A8\n"
- "\t.align 2, 0\n"
- "_080887A8:\n"
- "\t.4byte _080887C0\n"
- "\t.4byte _08088894\n"
- "\t.4byte _080887E0\n"
- "\t.4byte _08088878\n"
- "\t.4byte _08088894\n"
- "\t.4byte _080888B0\n"
- "_080887C0:\n"
- "\tmovs r0, 0x1\n"
- "\tnegs r0, r0\n"
- "\tmovs r1, 0\n"
- "\tstr r1, [sp]\n"
- "\tmovs r2, 0x10\n"
- "\tmovs r3, 0\n"
- "\tbl BeginNormalPaletteFade\n"
- "\tbl sub_8088444\n"
- "\tldr r0, _080887DC @ =sOptionsMenuPtr\n"
- "\tldr r1, [r0]\n"
- "\tb _080888A2\n"
- "\t.align 2, 0\n"
- "_080887DC: .4byte sOptionsMenuPtr\n"
- "_080887E0:\n"
- "\tbl sub_80BF72C\n"
- "\tcmp r0, 0x1\n"
- "\tbeq _080888B6\n"
- "\tbl sub_80888C0\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x4\n"
- "\tbhi _080888B6\n"
- "\tlsls r0, 2\n"
- "\tldr r1, _08088800 @ =_08088804\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.align 2, 0\n"
- "_08088800: .4byte _08088804\n"
- "\t.align 2, 0\n"
- "_08088804:\n"
- "\t.4byte _080888B6\n"
- "\t.4byte _08088818\n"
- "\t.4byte _08088824\n"
- "\t.4byte _08088858\n"
- "\t.4byte _08088868\n"
- "_08088818:\n"
- "\tldr r0, _08088820 @ =sOptionsMenuPtr\n"
- "\tldr r1, [r0]\n"
- "\tb _080888A2\n"
- "\t.align 2, 0\n"
- "_08088820: .4byte sOptionsMenuPtr\n"
- "_08088824:\n"
- "\tldr r4, _08088854 @ =sOptionsMenuPtr\n"
- "\tldr r0, [r4]\n"
- "\tldrb r0, [r0, 0xA]\n"
- "\tbl GetUserFrameGraphicsInfo\n"
- "\tldr r1, [r0]\n"
- "\tmovs r2, 0x90\n"
- "\tlsls r2, 1\n"
- "\tmovs r3, 0xD5\n"
- "\tlsls r3, 1\n"
- "\tmovs r0, 0x1\n"
- "\tbl LoadBgTiles\n"
- "\tldr r0, [r4]\n"
- "\tldrb r0, [r0, 0xA]\n"
- "\tbl GetUserFrameGraphicsInfo\n"
- "\tldr r0, [r0, 0x4]\n"
- "\tmovs r1, 0x20\n"
- "\tmovs r2, 0x20\n"
- "\tbl LoadPalette\n"
- "\tldr r0, [r4]\n"
- "\tb _0808886C\n"
- "\t.align 2, 0\n"
- "_08088854: .4byte sOptionsMenuPtr\n"
- "_08088858:\n"
- "\tldr r0, _08088864 @ =sOptionsMenuPtr\n"
- "\tldr r0, [r0]\n"
- "\tldrh r0, [r0, 0xE]\n"
- "\tbl sub_8088DE0\n"
- "\tb _080888B6\n"
- "\t.align 2, 0\n"
- "_08088864: .4byte sOptionsMenuPtr\n"
- "_08088868:\n"
- "\tldr r0, _08088874 @ =sOptionsMenuPtr\n"
- "\tldr r0, [r0]\n"
- "_0808886C:\n"
- "\tldrb r0, [r0, 0xE]\n"
- "\tbl sub_80889A8\n"
- "\tb _080888B6\n"
- "\t.align 2, 0\n"
- "_08088874: .4byte sOptionsMenuPtr\n"
- "_08088878:\n"
- "\tmovs r0, 0x1\n"
- "\tnegs r0, r0\n"
- "\tmovs r1, 0\n"
- "\tstr r1, [sp]\n"
- "\tmovs r2, 0\n"
- "\tmovs r3, 0x10\n"
- "\tbl BeginNormalPaletteFade\n"
- "\tldr r0, _08088890 @ =sOptionsMenuPtr\n"
- "\tldr r1, [r0]\n"
- "\tb _080888A2\n"
- "\t.align 2, 0\n"
- "_08088890: .4byte sOptionsMenuPtr\n"
- "_08088894:\n"
- "\tldr r0, _080888AC @ =gPaletteFade\n"
- "\tldrb r1, [r0, 0x7]\n"
- "\tmovs r0, 0x80\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbne _080888B6\n"
- "\tldr r1, [r3]\n"
- "_080888A2:\n"
- "\tldrb r0, [r1, 0x10]\n"
- "\tadds r0, 0x1\n"
- "\tstrb r0, [r1, 0x10]\n"
- "\tb _080888B6\n"
- "\t.align 2, 0\n"
- "_080888AC: .4byte gPaletteFade\n"
- "_080888B0:\n"
- "\tadds r0, r2, 0\n"
- "\tbl sub_8088B00\n"
- "_080888B6:\n"
- "\tadd sp, 0x4\n"
- "\tpop {r4}\n"
- "\tpop {r0}\n"
- "\tbx r0\n");
-}
-#endif
-//OptionsMenu_ProcessInput
-static u8 sub_80888C0(void)
+static u8 OptionMenu_ProcessInput(void)
{
u16 current;
u16* curr;
- if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+ if (JOY_REPT(DPAD_RIGHT))
{
- current = sOptionsMenuPtr->option[(sOptionsMenuPtr->unkE)];
- if (current == (sOptionsMenuItemCounts[sOptionsMenuPtr->unkE] - 1))
- sOptionsMenuPtr->option[sOptionsMenuPtr->unkE] = 0;
+ current = sOptionMenuPtr->option[(sOptionMenuPtr->unkE)];
+ if (current == (sOptionMenuItemCounts[sOptionMenuPtr->unkE] - 1))
+ sOptionMenuPtr->option[sOptionMenuPtr->unkE] = 0;
else
- sOptionsMenuPtr->option[sOptionsMenuPtr->unkE] = current + 1;
- if (sOptionsMenuPtr->unkE == MENUITEM_FRAMETYPE)
+ sOptionMenuPtr->option[sOptionMenuPtr->unkE] = current + 1;
+ if (sOptionMenuPtr->unkE == MENUITEM_FRAMETYPE)
return 2;
else
return 4;
}
- else if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+ else if (JOY_REPT(DPAD_LEFT))
{
- curr = &sOptionsMenuPtr->option[sOptionsMenuPtr->unkE];
+ curr = &sOptionMenuPtr->option[sOptionMenuPtr->unkE];
if (*curr == 0)
- *curr = sOptionsMenuItemCounts[sOptionsMenuPtr->unkE] - 1;
+ *curr = sOptionMenuItemCounts[sOptionMenuPtr->unkE] - 1;
else
- --*(curr);
+ --*curr;
- if (sOptionsMenuPtr->unkE == MENUITEM_FRAMETYPE)
+ if (sOptionMenuPtr->unkE == MENUITEM_FRAMETYPE)
return 2;
else
return 4;
}
- else if (gMain.newAndRepeatedKeys & DPAD_UP)
+ else if (JOY_REPT(DPAD_UP))
{
- if (sOptionsMenuPtr->unkE == MENUITEM_TEXTSPEED)
- sOptionsMenuPtr->unkE = MENUITEM_CANCEL;
+ if (sOptionMenuPtr->unkE == MENUITEM_TEXTSPEED)
+ sOptionMenuPtr->unkE = MENUITEM_CANCEL;
else
- sOptionsMenuPtr->unkE = sOptionsMenuPtr->unkE - 1;
+ sOptionMenuPtr->unkE = sOptionMenuPtr->unkE - 1;
return 3;
}
- else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ else if (JOY_REPT(DPAD_DOWN))
{
- if (sOptionsMenuPtr->unkE == MENUITEM_CANCEL)
- sOptionsMenuPtr->unkE = MENUITEM_TEXTSPEED;
+ if (sOptionMenuPtr->unkE == MENUITEM_CANCEL)
+ sOptionMenuPtr->unkE = MENUITEM_TEXTSPEED;
else
- sOptionsMenuPtr->unkE = sOptionsMenuPtr->unkE + 1;
+ sOptionMenuPtr->unkE = sOptionMenuPtr->unkE + 1;
return 3;
}
- else if ((gMain.newKeys & B_BUTTON) || (gMain.newKeys & A_BUTTON))
+ else if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON))
{
return 1;
}
@@ -634,42 +465,39 @@ static u8 sub_80888C0(void)
}
}
-
-//sub_80889A8
-#ifdef NONMATCHING // could not get it to match perfectly, no idea how they put so many vars on the stack
-static void sub_80889A8(u8 selection)
+static void BufferOptionMenuString(u8 selection)
{
- u8* dst;
- u8* str;
- u8* v8;
+ u8 str[20];
+ u8 buf[12];
+ u8 dst[3];
u8 x, y;
- memcpy(&dst, sOptionsMenuTextColor, 3);
- y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2;
+ memcpy(dst, sOptionMenuTextColor, 3);
x = 0x82;
+ y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2;
FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT));
switch (selection)
{
case MENUITEM_TEXTSPEED:
- AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sTextSpeedOptions);
+ AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sTextSpeedOptions[sOptionMenuPtr->option[selection]]);
break;
case MENUITEM_BATTLESCENE:
- AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sBattleSceneOptions);
+ AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sBattleSceneOptions[sOptionMenuPtr->option[selection]]);
break;
case MENUITEM_BATTLESTYLE:
- AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sBattleStyleOptions);
+ AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sBattleStyleOptions[sOptionMenuPtr->option[selection]]);
break;
case MENUITEM_SOUND:
- AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sSoundOptions);
+ AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sSoundOptions[sOptionMenuPtr->option[selection]]);
break;
case MENUITEM_BUTTONMODE:
- AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sButtonTypeOptions);
+ AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sButtonTypeOptions[sOptionMenuPtr->option[selection]]);
break;
case MENUITEM_FRAMETYPE:
StringCopy(str, gText_FrameType);
- ConvertIntToDecimalStringN(v8, sOptionsMenuPtr->option[2*selection] + 1, 1, 2);
- StringAppendN(str, v8, 3);
+ ConvertIntToDecimalStringN(buf, sOptionMenuPtr->option[selection] + 1, 1, 2);
+ StringAppendN(str, buf, 3);
AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str);
break;
default:
@@ -678,207 +506,31 @@ static void sub_80889A8(u8 selection)
PutWindowTilemap(1);
CopyWindowToVram(1, 3);
}
-#else
-NAKED
-static void sub_80889A8(u8 selection)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r8\n"
- "\tpush {r7}\n"
- "\tsub sp, 0x30\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tadd r4, sp, 0x2C\n"
- "\tldr r1, _08088A08 @ =sOptionsMenuTextColor\n"
- "\tadds r0, r4, 0\n"
- "\tmovs r2, 0x3\n"
- "\tbl memcpy\n"
- "\tmovs r0, 0x82\n"
- "\tmov r8, r0\n"
- "\tmovs r0, 0x2\n"
- "\tmovs r1, 0x1\n"
- "\tbl GetFontAttribute\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tsubs r0, 0x1\n"
- "\tmuls r0, r5\n"
- "\tadds r0, 0x2\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tmovs r0, 0x2\n"
- "\tmovs r1, 0x1\n"
- "\tbl GetFontAttribute\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmovs r1, 0x46\n"
- "\tstr r1, [sp]\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tmovs r0, 0x1\n"
- "\tmovs r1, 0x1\n"
- "\tmovs r2, 0x82\n"
- "\tadds r3, r7, 0\n"
- "\tbl FillWindowPixelRect\n"
- "\tadds r6, r4, 0\n"
- "\tcmp r5, 0x5\n"
- "\tbhi _08088ADE\n"
- "\tlsls r0, r5, 2\n"
- "\tldr r1, _08088A0C @ =_08088A10\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.align 2, 0\n"
- "_08088A08: .4byte sOptionsMenuTextColor\n"
- "_08088A0C: .4byte _08088A10\n"
- "\t.align 2, 0\n"
- "_08088A10:\n"
- "\t.4byte _08088A28\n"
- "\t.4byte _08088A38\n"
- "\t.4byte _08088A48\n"
- "\t.4byte _08088A58\n"
- "\t.4byte _08088A68\n"
- "\t.4byte _08088A9C\n"
- "_08088A28:\n"
- "\tstr r6, [sp]\n"
- "\tmovs r0, 0x1\n"
- "\tnegs r0, r0\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tldr r2, _08088A34 @ =sTextSpeedOptions\n"
- "\tb _08088A72\n"
- "\t.align 2, 0\n"
- "_08088A34: .4byte sTextSpeedOptions\n"
- "_08088A38:\n"
- "\tstr r6, [sp]\n"
- "\tmovs r0, 0x1\n"
- "\tnegs r0, r0\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tldr r2, _08088A44 @ =sBattleSceneOptions\n"
- "\tb _08088A72\n"
- "\t.align 2, 0\n"
- "_08088A44: .4byte sBattleSceneOptions\n"
- "_08088A48:\n"
- "\tstr r6, [sp]\n"
- "\tmovs r0, 0x1\n"
- "\tnegs r0, r0\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tldr r2, _08088A54 @ =sBattleStyleOptions\n"
- "\tb _08088A72\n"
- "\t.align 2, 0\n"
- "_08088A54: .4byte sBattleStyleOptions\n"
- "_08088A58:\n"
- "\tstr r6, [sp]\n"
- "\tmovs r0, 0x1\n"
- "\tnegs r0, r0\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tldr r2, _08088A64 @ =sSoundOptions\n"
- "\tb _08088A72\n"
- "\t.align 2, 0\n"
- "_08088A64: .4byte sSoundOptions\n"
- "_08088A68:\n"
- "\tstr r6, [sp]\n"
- "\tmovs r0, 0x1\n"
- "\tnegs r0, r0\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tldr r2, _08088A94 @ =sButtonTypeOptions\n"
- "_08088A72:\n"
- "\tldr r0, _08088A98 @ =sOptionsMenuPtr\n"
- "\tldr r0, [r0]\n"
- "\tlsls r1, r5, 1\n"
- "\tadds r0, r1\n"
- "\tldrh r0, [r0]\n"
- "\tlsls r0, 2\n"
- "\tadds r0, r2\n"
- "\tldr r0, [r0]\n"
- "\tstr r0, [sp, 0x8]\n"
- "\tmovs r0, 0x1\n"
- "\tmovs r1, 0x2\n"
- "\tmov r2, r8\n"
- "\tadds r3, r7, 0\n"
- "\tbl AddTextPrinterParameterized3\n"
- "\tb _08088ADE\n"
- "\t.align 2, 0\n"
- "_08088A94: .4byte sButtonTypeOptions\n"
- "_08088A98: .4byte sOptionsMenuPtr\n"
- "_08088A9C:\n"
- "\tldr r1, _08088AF8 @ =gText_FrameType\n"
- "\tadd r0, sp, 0xC\n"
- "\tbl StringCopy\n"
- "\tadd r4, sp, 0x20\n"
- "\tldr r0, _08088AFC @ =sOptionsMenuPtr\n"
- "\tldr r0, [r0]\n"
- "\tlsls r1, r5, 1\n"
- "\tadds r0, r1\n"
- "\tldrh r1, [r0]\n"
- "\tadds r1, 0x1\n"
- "\tadds r0, r4, 0\n"
- "\tmovs r2, 0x1\n"
- "\tmovs r3, 0x2\n"
- "\tbl ConvertIntToDecimalStringN\n"
- "\tadd r0, sp, 0xC\n"
- "\tadds r1, r4, 0\n"
- "\tmovs r2, 0x3\n"
- "\tbl StringAppendN\n"
- "\tstr r6, [sp]\n"
- "\tmovs r0, 0x1\n"
- "\tnegs r0, r0\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tadd r0, sp, 0xC\n"
- "\tstr r0, [sp, 0x8]\n"
- "\tmovs r0, 0x1\n"
- "\tmovs r1, 0x2\n"
- "\tmov r2, r8\n"
- "\tadds r3, r7, 0\n"
- "\tbl AddTextPrinterParameterized3\n"
- "_08088ADE:\n"
- "\tmovs r0, 0x1\n"
- "\tbl PutWindowTilemap\n"
- "\tmovs r0, 0x1\n"
- "\tmovs r1, 0x3\n"
- "\tbl CopyWindowToVram\n"
- "\tadd sp, 0x30\n"
- "\tpop {r3}\n"
- "\tmov r8, r3\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_08088AF8: .4byte gText_FrameType\n"
- "_08088AFC: .4byte sOptionsMenuPtr\n");
-}
-#endif
-
-//sub_8088B00
-static void sub_8088B00(u8 taskId)
+static void CloseAndSaveOptionMenu(u8 taskId)
{
gFieldCallback = sub_807DF64;
SetMainCallback2(gMain.savedCallback);
FreeAllWindowBuffers();
-
- gSaveBlock2Ptr->optionsTextSpeed = (u8) sOptionsMenuPtr->option[MENUITEM_TEXTSPEED];
- gSaveBlock2Ptr->optionsBattleSceneOff = (u8) sOptionsMenuPtr->option[MENUITEM_BATTLESCENE];
- gSaveBlock2Ptr->optionsBattleStyle = (u8) sOptionsMenuPtr->option[MENUITEM_BATTLESTYLE];
- gSaveBlock2Ptr->optionsSound = sOptionsMenuPtr->option[MENUITEM_SOUND];
- gSaveBlock2Ptr->optionsButtonMode = (u8) sOptionsMenuPtr->option[MENUITEM_BUTTONMODE];
- gSaveBlock2Ptr->optionsWindowFrameType = (u8) sOptionsMenuPtr->option[MENUITEM_FRAMETYPE];
+ gSaveBlock2Ptr->optionsTextSpeed = sOptionMenuPtr->option[MENUITEM_TEXTSPEED];
+ gSaveBlock2Ptr->optionsBattleSceneOff = sOptionMenuPtr->option[MENUITEM_BATTLESCENE];
+ gSaveBlock2Ptr->optionsBattleStyle = sOptionMenuPtr->option[MENUITEM_BATTLESTYLE];
+ gSaveBlock2Ptr->optionsSound = sOptionMenuPtr->option[MENUITEM_SOUND];
+ gSaveBlock2Ptr->optionsButtonMode = sOptionMenuPtr->option[MENUITEM_BUTTONMODE];
+ gSaveBlock2Ptr->optionsWindowFrameType = sOptionMenuPtr->option[MENUITEM_FRAMETYPE];
SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
- Free(sOptionsMenuPtr);
- sOptionsMenuPtr = NULL;
+ FREE_AND_SET_NULL(sOptionMenuPtr);
DestroyTask(taskId);
}
-
-
-//sub_8088BD0
-static void sub_8088BD0(void)
+static void PrintOptionMenuHeader(void)
{
- FillWindowPixelBuffer(0, 0x11);
- AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gText_MenuOptionOption, 8, 1, TEXT_SPEED_FF, NULL);
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gText_MenuOption, 8, 1, TEXT_SPEED_FF, NULL);
PutWindowTilemap(0);
CopyWindowToVram(0, 3);
}
-
-//sub_8088C0C
static void sub_8088C0C(void)
{
u8 h;
@@ -903,27 +555,23 @@ static void sub_8088C0C(void)
CopyBgTilemapBufferToVram(1);
}
-//sub_8088D8C
-static void sub_8088D8C(void)
+static void LoadOptionMenuItemNames(void)
{
u8 i;
- FillWindowPixelBuffer(1, 0x11);
+ FillWindowPixelBuffer(1, PIXEL_FILL(1));
for (i = 0; i < MENUITEM_COUNT; i++)
{
- AddTextPrinterParameterized(1, 2, sOptionMenuItemsNames[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0);
+ AddTextPrinterParameterized(WIN_OPTIONS, 2, sOptionMenuItemsNames[i], 8, (u8)((i * (GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, TEXT_SPEED_FF, NULL);
}
}
-
-//sub_8088DE0
static void sub_8088DE0(u16 selection)
{
u16 v1, v2;
v1 = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT);
v2 = selection * (v1 - 1) + 0x3A;
- SetGpuReg(0x44, (v2 << 8) | (v2 + v1));
- SetGpuReg(0x40, 0x10E0);
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(v2, v2 + v1));
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0x10, 0xE0));
}
-
diff --git a/src/poison.c b/src/poison.c
index 004e9aa98..7a0788c29 100644
--- a/src/poison.c
+++ b/src/poison.c
@@ -134,7 +134,7 @@ static const union AffineAnimCmd gUnknown_83E6A68[] =
AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd *const gUnknown_83E6A80[] =
+const union AffineAnimCmd *const gUnknown_83E6A80[] =
{
gUnknown_83E6A68,
};
diff --git a/src/pokemon.c b/src/pokemon.c
index 57633dbad..9aaddc142 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -2899,7 +2899,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
struct PokemonSubstruct2 *substruct2 = NULL;
struct PokemonSubstruct3 *substruct3 = NULL;
- if (field > MON_DATA_10)
+ if (field > MON_DATA_ENCRYPT_SEPARATOR)
{
substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0);
substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1);
@@ -2995,7 +2995,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
case MON_DATA_CHECKSUM:
retVal = boxMon->checksum;
break;
- case MON_DATA_10:
+ case MON_DATA_ENCRYPT_SEPARATOR:
retVal = boxMon->unknown;
break;
case MON_DATA_SPECIES:
@@ -3236,7 +3236,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
break;
}
- if (field > MON_DATA_10)
+ if (field > MON_DATA_ENCRYPT_SEPARATOR)
EncryptBoxMon(boxMon);
return retVal;
@@ -3323,7 +3323,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
struct PokemonSubstruct2 *substruct2 = NULL;
struct PokemonSubstruct3 *substruct3 = NULL;
- if (field > MON_DATA_10)
+ if (field > MON_DATA_ENCRYPT_SEPARATOR)
{
substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0);
substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1);
@@ -3382,7 +3382,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
case MON_DATA_CHECKSUM:
SET16(boxMon->checksum);
break;
- case MON_DATA_10:
+ case MON_DATA_ENCRYPT_SEPARATOR:
SET16(boxMon->unknown);
break;
case MON_DATA_SPECIES:
@@ -3582,7 +3582,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
break;
}
- if (field > MON_DATA_10)
+ if (field > MON_DATA_ENCRYPT_SEPARATOR)
{
boxMon->checksum = CalculateBoxMonChecksum(boxMon);
EncryptBoxMon(boxMon);
@@ -6094,7 +6094,6 @@ static void OakSpeechNidoranFSetupTemplateDummy(struct OakSpeechNidoranFStruct *
}
}
-#ifdef NONMATCHING
struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8 enable)
{
s32 size;
@@ -6134,8 +6133,7 @@ struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8
battlePosition = 1;
if (battlePosition > 8)
battlePosition = 8;
- // The following two statements refused to cooperate.
- sOakSpeechNidoranResources->spriteCount = battlePosition;
+ sOakSpeechNidoranResources->spriteCount = (battlePosition << 16) >> 16;
sOakSpeechNidoranResources->battlePosition = battlePosition;
sOakSpeechNidoranResources->frameCount = 4;
sOakSpeechNidoranResources->enable2 = FALSE;
@@ -6151,8 +6149,11 @@ struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8
}
else
{
- for (i = 0; i < (s8)sOakSpeechNidoranResources->spriteCount; ++i)
- sOakSpeechNidoranResources->bufferPtrs[i] = &sOakSpeechNidoranResources->dataBuffer[sOakSpeechNidoranResources->sizePerSprite * i];
+ do
+ {
+ for (i = 0; i < (s8)sOakSpeechNidoranResources->spriteCount; ++i)
+ sOakSpeechNidoranResources->bufferPtrs[i] = &sOakSpeechNidoranResources->dataBuffer[sOakSpeechNidoranResources->sizePerSprite * i];
+ } while (0);
}
sOakSpeechNidoranResources->templates = AllocZeroed(sizeof(struct SpriteTemplate) * sOakSpeechNidoranResources->spriteCount);
sOakSpeechNidoranResources->frameImages = AllocZeroed(sOakSpeechNidoranResources->spriteCount * sizeof(struct SpriteFrameImage) * sOakSpeechNidoranResources->frameCount);
@@ -6200,351 +6201,6 @@ struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8
}
return sOakSpeechNidoranResources;
}
-#else
-NAKED
-struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8 enable)
-{
- asm_unified("\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- lsls r1, 24\n\
- lsrs r5, r1, 24\n\
- movs r0, 0\n\
- mov r8, r0\n\
- ldr r4, _08044B34 @ =sOakSpeechNidoranResources\n\
- ldr r1, [r4]\n\
- cmp r1, 0\n\
- beq _08044B1E\n\
- ldrb r0, [r1, 0x2]\n\
- cmp r0, 0xA3\n\
- beq _08044B2E\n\
- adds r0, r1, 0\n\
- movs r1, 0\n\
- movs r2, 0x18\n\
- bl memset\n\
- mov r1, r8\n\
- str r1, [r4]\n\
- _08044B1E:\n\
- ldr r4, _08044B34 @ =sOakSpeechNidoranResources\n\
- movs r0, 0x18\n\
- bl AllocZeroed\n\
- adds r2, r0, 0\n\
- str r2, [r4]\n\
- cmp r2, 0\n\
- bne _08044B38\n\
- _08044B2E:\n\
- movs r0, 0\n\
- b _08044D70\n\
- .align 2, 0\n\
- _08044B34: .4byte sOakSpeechNidoranResources\n\
- _08044B38:\n\
- cmp r5, 0\n\
- beq _08044B94\n\
- cmp r5, 0x1\n\
- bne _08044B94\n\
- cmp r6, 0x4\n\
- bne _08044B5E\n\
- ldrb r1, [r2]\n\
- movs r0, 0x10\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldr r2, [r4]\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- movs r1, 0x40\n\
- b _08044B7C\n\
- _08044B5E:\n\
- cmp r6, 0x4\n\
- bls _08044B64\n\
- movs r6, 0\n\
- _08044B64:\n\
- ldrb r1, [r2]\n\
- movs r0, 0x10\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x1\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldr r2, [r4]\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- movs r1, 0x10\n\
- _08044B7C:\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldr r2, _08044B90 @ =sOakSpeechNidoranResources\n\
- ldr r1, [r2]\n\
- movs r0, 0x4\n\
- strb r0, [r1, 0x1]\n\
- ldr r1, [r2]\n\
- movs r0, 0x1\n\
- strb r0, [r1, 0x3]\n\
- b _08044BD0\n\
- .align 2, 0\n\
- _08044B90: .4byte sOakSpeechNidoranResources\n\
- _08044B94:\n\
- cmp r6, 0\n\
- bne _08044B9A\n\
- movs r6, 0x1\n\
- _08044B9A:\n\
- cmp r6, 0x8\n\
- bls _08044BA0\n\
- movs r6, 0x8\n\
- _08044BA0:\n\
- ldr r4, _08044C10 @ =sOakSpeechNidoranResources\n\
- ldr r3, [r4]\n\
- movs r0, 0xF\n\
- adds r1, r6, 0\n\
- ands r1, r0\n\
- ldrb r2, [r3]\n\
- movs r0, 0x10\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r3]\n\
- ldr r2, [r4]\n\
- lsls r3, r6, 4\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- orrs r0, r3\n\
- strb r0, [r2]\n\
- ldr r1, [r4]\n\
- movs r2, 0\n\
- movs r0, 0x4\n\
- strb r0, [r1, 0x1]\n\
- ldr r0, [r4]\n\
- strb r2, [r0, 0x3]\n\
- _08044BD0:\n\
- ldr r5, _08044C10 @ =sOakSpeechNidoranResources\n\
- ldr r0, [r5]\n\
- ldrb r1, [r0, 0x1]\n\
- lsls r1, 11\n\
- str r1, [r0, 0x4]\n\
- ldrb r0, [r0]\n\
- lsls r0, 28\n\
- lsrs r0, 28\n\
- muls r0, r1\n\
- bl AllocZeroed\n\
- ldr r1, [r5]\n\
- str r0, [r1, 0x8]\n\
- ldrb r0, [r1]\n\
- lsls r0, 28\n\
- lsrs r0, 23\n\
- bl AllocZeroed\n\
- adds r2, r0, 0\n\
- ldr r1, [r5]\n\
- str r2, [r1, 0xC]\n\
- ldr r0, [r1, 0x8]\n\
- cmp r0, 0\n\
- beq _08044C04\n\
- cmp r2, 0\n\
- bne _08044C14\n\
- _08044C04:\n\
- movs r0, 0x1\n\
- mov r1, r8\n\
- orrs r1, r0\n\
- mov r8, r1\n\
- b _08044C44\n\
- .align 2, 0\n\
- _08044C10: .4byte sOakSpeechNidoranResources\n\
- _08044C14:\n\
- ldrb r0, [r1]\n\
- lsls r0, 28\n\
- movs r4, 0\n\
- adds r3, r5, 0\n\
- cmp r0, 0\n\
- beq _08044C44\n\
- _08044C20:\n\
- ldr r3, [r5]\n\
- ldr r0, [r3, 0xC]\n\
- lsls r1, r4, 2\n\
- adds r1, r0\n\
- ldr r0, [r3, 0x4]\n\
- adds r2, r0, 0\n\
- muls r2, r4\n\
- ldr r0, [r3, 0x8]\n\
- adds r0, r2\n\
- str r0, [r1]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- ldrb r0, [r3]\n\
- lsls r0, 28\n\
- lsrs r0, 28\n\
- cmp r4, r0\n\
- blt _08044C20\n\
- _08044C44:\n\
- ldr r5, _08044C8C @ =sOakSpeechNidoranResources\n\
- ldr r0, [r5]\n\
- ldrb r1, [r0]\n\
- lsls r1, 28\n\
- lsrs r1, 28\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 3\n\
- bl AllocZeroed\n\
- ldr r2, [r5]\n\
- str r0, [r2, 0x10]\n\
- ldrb r1, [r2]\n\
- lsls r1, 28\n\
- lsrs r1, 28\n\
- ldrb r0, [r2, 0x1]\n\
- lsls r0, 3\n\
- muls r0, r1\n\
- bl AllocZeroed\n\
- adds r2, r0, 0\n\
- ldr r1, [r5]\n\
- str r2, [r1, 0x14]\n\
- ldr r0, [r1, 0x10]\n\
- cmp r0, 0\n\
- beq _08044C7C\n\
- cmp r2, 0\n\
- bne _08044C90\n\
- _08044C7C:\n\
- movs r0, 0x2\n\
- mov r1, r8\n\
- orrs r1, r0\n\
- lsls r0, r1, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- b _08044CE2\n\
- .align 2, 0\n\
- _08044C8C: .4byte sOakSpeechNidoranResources\n\
- _08044C90:\n\
- movs r4, 0\n\
- ldrb r0, [r1, 0x1]\n\
- ldrb r1, [r1]\n\
- lsls r1, 28\n\
- lsrs r1, 28\n\
- muls r0, r1\n\
- adds r3, r5, 0\n\
- cmp r4, r0\n\
- bge _08044CC6\n\
- adds r7, r3, 0\n\
- movs r5, 0x80\n\
- lsls r5, 4\n\
- _08044CA8:\n\
- ldr r2, [r7]\n\
- ldr r1, [r2, 0x14]\n\
- lsls r0, r4, 3\n\
- adds r0, r1\n\
- strh r5, [r0, 0x4]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- ldrb r1, [r2, 0x1]\n\
- ldrb r0, [r2]\n\
- lsls r0, 28\n\
- lsrs r0, 28\n\
- muls r0, r1\n\
- cmp r4, r0\n\
- blt _08044CA8\n\
- _08044CC6:\n\
- ldr r0, [r3]\n\
- ldrb r4, [r0, 0x3]\n\
- cmp r4, 0\n\
- beq _08044CDA\n\
- cmp r4, 0x1\n\
- bne _08044CDA\n\
- adds r1, r6, 0\n\
- bl OakSpeechNidoranFSetupTemplate\n\
- b _08044CE2\n\
- _08044CDA:\n\
- ldr r0, _08044D60 @ =sOakSpeechNidoranResources\n\
- ldr r0, [r0]\n\
- bl OakSpeechNidoranFSetupTemplateDummy\n\
- _08044CE2:\n\
- movs r0, 0x2\n\
- mov r1, r8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08044D12\n\
- ldr r4, _08044D60 @ =sOakSpeechNidoranResources\n\
- ldr r0, [r4]\n\
- ldr r0, [r0, 0x14]\n\
- cmp r0, 0\n\
- beq _08044D00\n\
- bl Free\n\
- ldr r1, [r4]\n\
- movs r0, 0\n\
- str r0, [r1, 0x14]\n\
- _08044D00:\n\
- ldr r0, [r4]\n\
- ldr r0, [r0, 0x10]\n\
- cmp r0, 0\n\
- beq _08044D12\n\
- bl Free\n\
- ldr r1, [r4]\n\
- movs r0, 0\n\
- str r0, [r1, 0x10]\n\
- _08044D12:\n\
- movs r0, 0x1\n\
- mov r1, r8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08044D42\n\
- ldr r4, _08044D60 @ =sOakSpeechNidoranResources\n\
- ldr r0, [r4]\n\
- ldr r0, [r0, 0xC]\n\
- cmp r0, 0\n\
- beq _08044D30\n\
- bl Free\n\
- ldr r1, [r4]\n\
- movs r0, 0\n\
- str r0, [r1, 0xC]\n\
- _08044D30:\n\
- ldr r0, [r4]\n\
- ldr r0, [r0, 0x8]\n\
- cmp r0, 0\n\
- beq _08044D42\n\
- bl Free\n\
- ldr r1, [r4]\n\
- movs r0, 0\n\
- str r0, [r1, 0x8]\n\
- _08044D42:\n\
- mov r0, r8\n\
- cmp r0, 0\n\
- beq _08044D64\n\
- ldr r4, _08044D60 @ =sOakSpeechNidoranResources\n\
- ldr r0, [r4]\n\
- movs r1, 0\n\
- movs r2, 0x18\n\
- bl memset\n\
- ldr r0, [r4]\n\
- bl Free\n\
- movs r0, 0\n\
- str r0, [r4]\n\
- b _08044D6C\n\
- .align 2, 0\n\
- _08044D60: .4byte sOakSpeechNidoranResources\n\
- _08044D64:\n\
- ldr r0, _08044D7C @ =sOakSpeechNidoranResources\n\
- ldr r1, [r0]\n\
- movs r0, 0xA3\n\
- strb r0, [r1, 0x2]\n\
- _08044D6C:\n\
- ldr r0, _08044D7C @ =sOakSpeechNidoranResources\n\
- ldr r0, [r0]\n\
- _08044D70:\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
- _08044D7C: .4byte sOakSpeechNidoranResources\n\
- ");
-}
-#endif
void OakSpeechNidoranFFreeResources(void)
{
diff --git a/src/shop.c b/src/shop.c
index f1dda35b4..3dd9ba102 100644
--- a/src/shop.c
+++ b/src/shop.c
@@ -105,46 +105,26 @@ static u8 sub_809AB7C(u32 a0)
return 0;
}
-/*
-void (const u16 *list) //SetShopItemsForSale
-{
- u16 i;
- gShopData.itemList = list;
- gShopData.itemCount = 0;
- if (list[0] == 0)
- return;
-
- i = 0;
- while (list[i] != 0)
- {
- gShopData.itemCount++;
- if (list[i] == 0)
- return;
- i++;
- }
-}
-*/
-
-//#ifdef NONMATCHING
-// WHAT THE FUCK IS UP WITH THIS FUNCTION
-void sub_809ABD8(const u16 *items)
+//SetShopItemsForSale
+void sub_809ABD8(const u16 *items) //I really don't know what GameFreak was thinking here..
{
- //const u16* mart = items;
- u16 item;
- gShopData.itemList = items;
- gShopData.itemCount = 0;
-
- while (1)
- {
- item = items[++gShopData.itemCount];
- }
+ struct ShopData *mart;
+ //u16 i;
+
+ mart = &gShopData;
+ mart->itemList = items;
+ mart->itemCount = 0;
+
+ //i = 0;
+ if (mart->itemList[0] == 0)
+ return;
+
+ do {
+ ++gShopData.itemCount;
+ //i = gShopData.itemCount;
+ //} while (mart->itemList[i]);
+ } while (mart->itemList[gShopData.itemCount]);
}
-/*
-#else
-NAKED
-void sub_809ABD8(const u16 *items)
- asm_unified("\t
-*/
//SetShopMenuCallback
void sub_809AC04(MainCallback callback)
@@ -165,6 +145,6 @@ static void sub_809AC10(u8 taskId)
sub_809ACF8(taskId);
return;
}
- gUnknown_83DF09C.func.void_u8(Menu_GetCursorPos());
+ //gUnknown_83DF09C.func.void_u8(Menu_GetCursorPos());
}
diff --git a/src/tileset_anims.c b/src/tileset_anims.c
index 30f390512..a8539a5d8 100644
--- a/src/tileset_anims.c
+++ b/src/tileset_anims.c
@@ -23,14 +23,118 @@ static void (*sSecondaryTilesetAnimCallback)(u16);
static void _InitPrimaryTilesetAnimation(void);
static void _InitSecondaryTilesetAnimation(void);
-extern const u16 *const gUnknown_83A7660[];
-extern const u16 *const gUnknown_83AA654[];
-extern const u16 *const gUnknown_83AB874[];
-extern const u16 *const gUnknown_83ABDB4[];
-extern const u16 *const gUnknown_83AC1E8[];
-extern const u16 *const gUnknown_83AC5F8[];
-extern const u16 *const gUnknown_83AC7C8[];
-extern const u16 *const gUnknown_83AC950[];
+static const u16 gUnknown_83A73E0[] = INCBIN_U16("graphics/tileset_anims/anim_0_0.bin");
+static const u16 gUnknown_83A7460[] = INCBIN_U16("graphics/tileset_anims/anim_0_1.bin");
+static const u16 gUnknown_83A74E0[] = INCBIN_U16("graphics/tileset_anims/anim_0_2.bin");
+static const u16 gUnknown_83A7560[] = INCBIN_U16("graphics/tileset_anims/anim_0_3.bin");
+static const u16 gUnknown_83A75E0[] = INCBIN_U16("graphics/tileset_anims/anim_0_4.bin");
+
+static const u16 *const gUnknown_83A7660[] = {
+ gUnknown_83A73E0,
+ gUnknown_83A7460,
+ gUnknown_83A74E0,
+ gUnknown_83A7560,
+ gUnknown_83A75E0
+};
+
+static const u16 gUnknown_83A7674[] = INCBIN_U16("graphics/tileset_anims/anim_1_0.bin");
+static const u16 gUnknown_83A7C74[] = INCBIN_U16("graphics/tileset_anims/anim_1_1.bin");
+static const u16 gUnknown_83A8274[] = INCBIN_U16("graphics/tileset_anims/anim_1_2.bin");
+static const u16 gUnknown_83A8874[] = INCBIN_U16("graphics/tileset_anims/anim_1_3.bin");
+static const u16 gUnknown_83A8E74[] = INCBIN_U16("graphics/tileset_anims/anim_1_4.bin");
+static const u16 gUnknown_83A9474[] = INCBIN_U16("graphics/tileset_anims/anim_1_5.bin");
+static const u16 gUnknown_83A9A74[] = INCBIN_U16("graphics/tileset_anims/anim_1_6.bin");
+static const u16 gUnknown_83AA074[] = INCBIN_U16("graphics/tileset_anims/anim_1_7.bin");
+
+static const u16 *const gUnknown_83AA654[] = {
+ gUnknown_83A7674,
+ gUnknown_83A7C74,
+ gUnknown_83A8274,
+ gUnknown_83A8874,
+ gUnknown_83A8E74,
+ gUnknown_83A9474,
+ gUnknown_83A9A74,
+ gUnknown_83AA074
+};
+
+static const u16 gUnknown_83AA674[] = INCBIN_U16("graphics/tileset_anims/anim_2_0.bin");
+static const u16 gUnknown_83AA8B4[] = INCBIN_U16("graphics/tileset_anims/anim_2_1.bin");
+static const u16 gUnknown_83AAAF4[] = INCBIN_U16("graphics/tileset_anims/anim_2_2.bin");
+static const u16 gUnknown_83AAD34[] = INCBIN_U16("graphics/tileset_anims/anim_2_3.bin");
+static const u16 gUnknown_83AAF74[] = INCBIN_U16("graphics/tileset_anims/anim_2_4.bin");
+static const u16 gUnknown_83AB1B4[] = INCBIN_U16("graphics/tileset_anims/anim_2_5.bin");
+static const u16 gUnknown_83AB3F4[] = INCBIN_U16("graphics/tileset_anims/anim_2_6.bin");
+static const u16 gUnknown_83AB634[] = INCBIN_U16("graphics/tileset_anims/anim_2_7.bin");
+
+static const u16 *const gUnknown_83AB874[] = {
+ gUnknown_83AA674,
+ gUnknown_83AA8B4,
+ gUnknown_83AAAF4,
+ gUnknown_83AAD34,
+ gUnknown_83AAF74,
+ gUnknown_83AB1B4,
+ gUnknown_83AB3F4,
+ gUnknown_83AB634
+};
+
+static const u16 gUnknown_83AB894[] = INCBIN_U16("graphics/tileset_anims/anim_3_0.bin");
+static const u16 gUnknown_83AB994[] = INCBIN_U16("graphics/tileset_anims/anim_3_1.bin");
+static const u16 gUnknown_83ABA94[] = INCBIN_U16("graphics/tileset_anims/anim_3_2.bin");
+static const u16 gUnknown_83ABB94[] = INCBIN_U16("graphics/tileset_anims/anim_3_3.bin");
+static const u16 gUnknown_83ABC94[] = INCBIN_U16("graphics/tileset_anims/anim_3_4.bin");
+static const u16 gUnknown_83ABD94[16] = {};
+
+static const u16 *const gUnknown_83ABDB4[] = {
+ gUnknown_83AB894,
+ gUnknown_83AB994,
+ gUnknown_83ABA94,
+ gUnknown_83ABB94,
+ gUnknown_83ABC94
+};
+
+static const u16 gUnknown_83ABDC8[] = INCBIN_U16("graphics/tileset_anims/anim_4_0.bin");
+static const u16 gUnknown_83ABEC8[] = INCBIN_U16("graphics/tileset_anims/anim_4_1.bin");
+static const u16 gUnknown_83ABFC8[] = INCBIN_U16("graphics/tileset_anims/anim_4_2.bin");
+static const u16 gUnknown_83AC0C8[] = INCBIN_U16("graphics/tileset_anims/anim_4_3.bin");
+static const u16 gUnknown_83AC1C8[0x10] = {};
+
+static const u16 *const gUnknown_83AC1E8[] = {
+ gUnknown_83ABDC8,
+ gUnknown_83ABEC8,
+ gUnknown_83ABFC8,
+ gUnknown_83AC0C8
+};
+
+static const u16 gUnknown_83AC1F8[] = INCBIN_U16("graphics/tileset_anims/anim_5_0.bin");
+static const u16 gUnknown_83AC2F8[] = INCBIN_U16("graphics/tileset_anims/anim_5_1.bin");
+static const u16 gUnknown_83AC3F8[] = INCBIN_U16("graphics/tileset_anims/anim_5_2.bin");
+static const u16 gUnknown_83AC4F8[] = INCBIN_U16("graphics/tileset_anims/anim_5_3.bin");
+
+static const u16 *const gUnknown_83AC5F8[] = {
+ gUnknown_83AC1F8,
+ gUnknown_83AC2F8,
+ gUnknown_83AC3F8,
+ gUnknown_83AC4F8
+};
+
+static const u16 gUnknown_83AC608[] = INCBIN_U16("graphics/tileset_anims/anim_6_0.bin");
+static const u16 gUnknown_83AC6E8[] = INCBIN_U16("graphics/tileset_anims/anim_6_1.bin");
+
+static const u16 *const gUnknown_83AC7C8[] = {
+ gUnknown_83AC608,
+ gUnknown_83AC6E8
+};
+
+static const u16 gUnknown_83AC7D0[] = INCBIN_U16("graphics/tileset_anims/anim_7_0.bin");
+static const u16 gUnknown_83AC850[] = INCBIN_U16("graphics/tileset_anims/anim_7_1.bin");
+static const u16 gUnknown_83AC8D0[] = INCBIN_U16("graphics/tileset_anims/anim_7_2.bin");
+
+static const u16 *const gUnknown_83AC950[] = {
+ gUnknown_83AC7D0,
+ gUnknown_83AC850,
+ gUnknown_83AC8D0,
+ gUnknown_83AC850
+};
static void ResetTilesetAnimBuffer(void)
{
@@ -105,26 +209,17 @@ static void _InitSecondaryTilesetAnimation(void)
static void sub_80700A4(u16 timer)
{
- const u16 *const *ptr = gUnknown_83A7660;
- u16 i = timer % 5;
-
- AppendTilesetAnimToBuffer(ptr[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(508)), 0x80);
+ AppendTilesetAnimToBuffer(gUnknown_83A7660[timer % NELEMS(gUnknown_83A7660)], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(508)), 0x80);
}
static void sub_80700D0(u16 timer)
{
- const u16 *const *ptr = gUnknown_83AA654;
- u16 i = timer % 8;
-
- AppendTilesetAnimToBuffer(ptr[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(416)), 0x600);
+ AppendTilesetAnimToBuffer(gUnknown_83AA654[timer % NELEMS(gUnknown_83AA654)], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(416)), 0x600);
}
static void sub_80700F8(u16 timer)
{
- const u16 *const *ptr = gUnknown_83AB874;
- u16 i = timer % 8;
-
- AppendTilesetAnimToBuffer(ptr[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(464)), 0x240);
+ AppendTilesetAnimToBuffer(gUnknown_83AB874[timer % NELEMS(gUnknown_83AB874)], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(464)), 0x240);
}
static void sub_8070120(u16 timer)
@@ -146,10 +241,7 @@ void sub_8070154(void)
static void sub_807017C(u16 timer)
{
- const u16 *const *ptr = gUnknown_83ABDB4;
- u16 i = timer % 5;
-
- AppendTilesetAnimToBuffer(ptr[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(744)), 0x100);
+ AppendTilesetAnimToBuffer(gUnknown_83ABDB4[timer % NELEMS(gUnknown_83ABDB4)], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(744)), 0x100);
}
static void sub_80701AC(u16 timer)
@@ -167,10 +259,7 @@ void sub_80701D8(void)
static void sub_80701FC(u16 timer)
{
- const u16 *const *ptr = gUnknown_83AC1E8;
- u16 i = timer % 4;
-
- AppendTilesetAnimToBuffer(ptr[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(976)), 0x100);
+ AppendTilesetAnimToBuffer(gUnknown_83AC1E8[timer % NELEMS(gUnknown_83AC1E8)], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(976)), 0x100);
}
static void sub_8070224(u16 timer)
@@ -188,10 +277,7 @@ void sub_8070250(void)
static void sub_8070274(u16 timer)
{
- const u16 *const *ptr = gUnknown_83AC5F8;
- u16 i = timer % 4;
-
- AppendTilesetAnimToBuffer(ptr[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(896)), 0x100);
+ AppendTilesetAnimToBuffer(gUnknown_83AC5F8[timer % NELEMS(gUnknown_83AC5F8)], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(896)), 0x100);
}
static void sub_807029C(u16 timer)
@@ -209,8 +295,8 @@ void sub_80702B4(void)
static void sub_80702DC(u16 timer)
{
- u16 i = timer % 2;
-
+ u16 i = timer % NELEMS(gUnknown_83AC7C8);
+
AppendTilesetAnimToBuffer(gUnknown_83AC7C8[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(880)), 0xE0);
}
@@ -229,7 +315,7 @@ void sub_807031C(void)
static void sub_8070340(u16 timer)
{
- u16 i = timer % 4;
+ u16 i = timer % NELEMS(gUnknown_83AC950);
AppendTilesetAnimToBuffer(gUnknown_83AC950[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(739)), 0x80);
}
diff --git a/src/tm_case.c b/src/tm_case.c
index 260efaa53..25fe9a72c 100644
--- a/src/tm_case.c
+++ b/src/tm_case.c
@@ -305,7 +305,7 @@ static void CB2_SetUpTMCaseUI_Blocking(void)
{
while (1)
{
- if (sub_80BF72C() == TRUE)
+ if ((u8)sub_80BF72C() == TRUE)
break;
if (DoSetUpTMCaseUI() == TRUE)
break;
@@ -734,7 +734,7 @@ static void Task_TMCaseMain(u8 taskId)
if (!gPaletteFade.active)
{
- if (sub_80BF72C() != TRUE)
+ if ((u8)sub_80BF72C() != TRUE)
{
input = ListMenu_ProcessInput(data[0]);
ListMenuGetScrollAndRow(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow);
@@ -815,7 +815,7 @@ static void Task_TMContextMenu_HandleInput(u8 taskId)
{
s8 input;
- if (sub_80BF72C() != TRUE)
+ if ((u8)sub_80BF72C() != TRUE)
{
input = Menu_ProcessInputNoWrapAround();
switch (input)
diff --git a/src/trade_scene.c b/src/trade_scene.c
index 7b738aa52..fc0e97573 100644
--- a/src/trade_scene.c
+++ b/src/trade_scene.c
@@ -488,7 +488,7 @@ static const struct WindowTemplate gUnknown_826D1BC[] = {
}, DUMMY_WIN_TEMPLATE
};
-const struct WindowTemplate gUnknown_826D1CC = {
+const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate = {
.bg = 0,
.tilemapLeft = 21,
.tilemapTop = 9,
@@ -881,7 +881,7 @@ void CB2_InitTradeAnim_LinkTrade(void)
break;
case 8:
LoadTradeMonPic(1, 1);
- sub_80504B0();
+ LinkTradeDrawWindow();
gMain.state++;
break;
case 9:
@@ -899,7 +899,7 @@ void CB2_InitTradeAnim_LinkTrade(void)
gMain.state++;
break;
case 11:
- sub_805049C();
+ InitTradeSequenceBgGpuRegs();
TradeBufferOTnameAndNicknames();
gMain.state++;
break;
@@ -922,13 +922,13 @@ void CB2_InitTradeAnim_LinkTrade(void)
UpdatePaletteFade();
}
-void sub_805049C(void)
+void InitTradeSequenceBgGpuRegs(void)
{
SetTradeSequenceBgGpuRegs(5);
SetTradeSequenceBgGpuRegs(0);
}
-void sub_80504B0(void)
+void LinkTradeDrawWindow(void)
{
FillWindowPixelBuffer(0, PIXEL_FILL(15));
PutWindowTilemap(0);
@@ -2552,7 +2552,7 @@ static void sub_8053E8C(void)
{
case 0:
gMain.state++;
- StringExpandPlaceholders(gStringVar4, gUnknown_841E325);
+ StringExpandPlaceholders(gStringVar4, gText_CommunicationStandby5);
DrawTextOnTradeWindow(0, gStringVar4, 0);
break;
case 1:
diff --git a/sym_common.txt b/sym_common.txt
index def8fff58..b6e5f8b5e 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -94,10 +94,9 @@ gUnknown_3005354: @ 3005354
.align 2
.include "field_specials.o"
-
-gCB2_AfterEvolution: @ 300537C
- .space 0x4
-
+ .align 2
+ .include "evolution_scene.o"
+ .align 2
.include "save.o"
.align 2
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 3584e5080..7a25f1726 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -226,8 +226,7 @@ gFieldEffectArguments: @ 20386E0
.include "src/scanline_effect.o"
.align 2
-sOptionsMenuPtr: @ 2039620
- .space 0x4
+ .include "src/option_menu.o"
gTrainerCards: @ 2039624
.space 0x180
@@ -316,7 +315,7 @@ gUnknown_20398B8: @ 20398B8
gUnknown_20398BA: @ 20398BA
.space 0x7A
-gShopData: @ 2039934
+gUnknown_2039934: @ 2039934
.space 0xE
gUnknown_2039942: @ 2039942
@@ -421,13 +420,8 @@ gPlayerFacingPosition: @ 2039A04
.include "src/field_specials.o"
.align 2
.include "src/battle_records.o"
-
-gUnknown_2039A20: @ 2039A20
- .space 0x4
-
-gUnknown_2039A24: @ 2039A24
- .space 0x4
-
+ .align 2
+ .include "src/evolution_scene.o"
.align 2
.include "src/coins.o"
.align 2