summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_1.s16
-rw-r--r--asm/battle_2.s4
-rw-r--r--asm/battle_controller_link_opponent.s4
-rw-r--r--asm/battle_controller_link_partner.s4
-rw-r--r--asm/battle_controller_oak.s2
-rw-r--r--asm/battle_controller_opponent.s4
-rw-r--r--asm/battle_controller_player.s2
-rw-r--r--asm/battle_controller_pokedude.s4
-rw-r--r--asm/battle_setup.s10
-rw-r--r--asm/battle_tower.s2
-rw-r--r--asm/berry_crush.s (renamed from asm/unk_814B6F0.s)4
-rw-r--r--asm/berry_crush_2.s (renamed from asm/unk_814BB4C.s)2
-rw-r--r--asm/berry_crush_3.s (renamed from asm/unk_814D5C8.s)0
-rw-r--r--asm/cable_club.s8
-rw-r--r--asm/clear_save_data_screen.s4
-rw-r--r--asm/credits.s14
-rw-r--r--asm/dodrio_berry_picking.s (renamed from asm/unk_81507FC.s)0
-rw-r--r--asm/egg_hatch.s1812
-rw-r--r--asm/evolution_scene.s18
-rw-r--r--asm/field_effect.s60
-rw-r--r--asm/field_fadetransition.s42
-rw-r--r--asm/hof_pc.s8
-rw-r--r--asm/item_menu.s4
-rw-r--r--asm/item_use.s34
-rw-r--r--asm/learn_move.s24
-rw-r--r--asm/link.s2
-rw-r--r--asm/link_rfu.s12
-rw-r--r--asm/link_rfu_3.s44
-rw-r--r--asm/menu.s14
-rw-r--r--asm/menu_helpers.s4
-rw-r--r--asm/new_menu_helpers.s10
-rw-r--r--asm/option_menu.s4
-rw-r--r--asm/overworld.s86
-rw-r--r--asm/party_menu.s36
-rw-r--r--asm/player_pc.s42
-rw-r--r--asm/pokedex_screen.s4
-rw-r--r--asm/pokemon_jump.s (renamed from asm/unk_8147500.s)112
-rw-r--r--asm/pokemon_jump_2.s (renamed from asm/unk_8147AA8.s)6
-rw-r--r--asm/pokemon_storage_system.s26
-rw-r--r--asm/pokemon_summary_screen.s4
-rw-r--r--asm/region_map.s16
-rw-r--r--asm/reshow_battle_screen.s4
-rw-r--r--asm/safari_zone.s8
-rw-r--r--asm/script_menu.s2
-rw-r--r--asm/script_pokemon_util_80BF8FC.s12
-rw-r--r--asm/shop.s24
-rw-r--r--asm/slot_machine.s6
-rw-r--r--asm/start_menu.s16
-rw-r--r--asm/text_window.s6
-rw-r--r--asm/trade.s62
-rw-r--r--asm/union_room_chat.s4
-rw-r--r--asm/unk_810C3A4.s389
-rw-r--r--asm/wireless_communication_status_screen.s2
-rw-r--r--data/data.s32
-rw-r--r--data/data_83FECCC.s4
-rw-r--r--data/data_8468C98.s50
-rw-r--r--data/graphics.s8
-rw-r--r--data/specials.inc2
-rw-r--r--graphics/misc/egg_hatch.pngbin0 -> 482 bytes
-rw-r--r--graphics/misc/egg_shard.pngbin0 -> 202 bytes
-rw-r--r--graphics/misc/unk_846B008.pngbin0 -> 757 bytes
-rw-r--r--graphics_file_rules.mk3
-rw-r--r--include/constants/songs.h2
-rw-r--r--include/daycare.h6
-rw-r--r--include/decompress.h1
-rw-r--r--include/field_fadetransition.h1
-rw-r--r--include/global.h8
-rw-r--r--include/graphics.h7
-rw-r--r--include/map_obj_80688E4.h1
-rw-r--r--include/map_obj_lock.h1
-rw-r--r--include/menu.h6
-rw-r--r--include/new_menu_helpers.h2
-rw-r--r--include/overworld.h8
-rw-r--r--include/pokemon.h3
-rw-r--r--include/text_window.h2
-rw-r--r--include/unk_810c3a4.h19
-rw-r--r--ld_script.txt14
-rw-r--r--src/daycare.c864
-rw-r--r--src/egg_hatch.c1758
-rw-r--r--src/mystery_gift_menu.c8
-rw-r--r--src/oak_speech.c6
-rw-r--r--src/pokemon.c20
-rw-r--r--src/quest_log_battle.c4
-rw-r--r--src/seagallop.c41
-rw-r--r--src/trainer_tower.c2
-rw-r--r--src/vs_seeker.c230
-rw-r--r--sym_bss.txt3
-rw-r--r--sym_common.txt2
88 files changed, 3391 insertions, 2770 deletions
diff --git a/asm/battle_1.s b/asm/battle_1.s
index 6ae993e27..c479650a7 100644
--- a/asm/battle_1.s
+++ b/asm/battle_1.s
@@ -294,7 +294,7 @@ sub_800F40C: @ 800F40C
thumb_func_start LoadBattleTextboxAndBackground
LoadBattleTextboxAndBackground: @ 800F420
push {lr}
- ldr r0, _0800F454 @ =gUnknown_8D00000
+ ldr r0, _0800F454 @ =gBattleTextboxTiles
movs r1, 0xC0
lsls r1, 19
bl LZDecompressVram
@@ -305,7 +305,7 @@ LoadBattleTextboxAndBackground: @ 800F420
bl CopyToBgTilemapBuffer
movs r0, 0
bl CopyBgTilemapBufferToVram
- ldr r0, _0800F45C @ =gUnknown_8D004D8
+ ldr r0, _0800F45C @ =gBattleTextboxPalette
movs r1, 0
movs r2, 0x40
bl LoadCompressedPalette
@@ -314,9 +314,9 @@ LoadBattleTextboxAndBackground: @ 800F420
pop {r0}
bx r0
.align 2, 0
-_0800F454: .4byte gUnknown_8D00000
+_0800F454: .4byte gBattleTextboxTiles
_0800F458: .4byte gFile_graphics_interface_menu_map_tilemap
-_0800F45C: .4byte gUnknown_8D004D8
+_0800F45C: .4byte gBattleTextboxPalette
thumb_func_end LoadBattleTextboxAndBackground
thumb_func_start sub_800F460
@@ -1385,13 +1385,13 @@ _0800FCD0:
.4byte _0800FD68
.4byte _0800FD8C
_0800FCEC:
- ldr r0, _0800FCF8 @ =gUnknown_8D00000
+ ldr r0, _0800FCF8 @ =gBattleTextboxTiles
movs r1, 0xC0
lsls r1, 19
bl LZDecompressVram
b _0800FD94
.align 2, 0
-_0800FCF8: .4byte gUnknown_8D00000
+_0800FCF8: .4byte gBattleTextboxTiles
_0800FCFC:
ldr r1, _0800FD10 @ =gFile_graphics_interface_menu_map_tilemap
movs r0, 0
@@ -1404,13 +1404,13 @@ _0800FCFC:
.align 2, 0
_0800FD10: .4byte gFile_graphics_interface_menu_map_tilemap
_0800FD14:
- ldr r0, _0800FD20 @ =gUnknown_8D004D8
+ ldr r0, _0800FD20 @ =gBattleTextboxPalette
movs r1, 0
movs r2, 0x40
bl LoadCompressedPalette
b _0800FD94
.align 2, 0
-_0800FD20: .4byte gUnknown_8D004D8
+_0800FD20: .4byte gBattleTextboxPalette
_0800FD24:
bl sub_800FC2C
lsls r0, 24
diff --git a/asm/battle_2.s b/asm/battle_2.s
index e1dd268aa..b4414ad71 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -3597,7 +3597,7 @@ _08011A9C:
ldr r0, _08011B74 @ =gBattle_BG3_Y
strh r4, [r0]
bl sub_800F34C
- ldr r0, _08011B78 @ =gUnknown_8D004D8
+ ldr r0, _08011B78 @ =gBattleTextboxPalette
movs r1, 0
movs r2, 0x40
bl LoadCompressedPalette
@@ -3655,7 +3655,7 @@ _08011B68: .4byte gBattle_BG2_X
_08011B6C: .4byte gBattle_BG2_Y
_08011B70: .4byte gBattle_BG3_X
_08011B74: .4byte gBattle_BG3_Y
-_08011B78: .4byte gUnknown_8D004D8
+_08011B78: .4byte gBattleTextboxPalette
_08011B7C: .4byte gReservedSpritePaletteCount
_08011B80: .4byte sub_80116F4
_08011B84: .4byte sub_800F6FC
diff --git a/asm/battle_controller_link_opponent.s b/asm/battle_controller_link_opponent.s
index a778933e8..18b83bac6 100644
--- a/asm/battle_controller_link_opponent.s
+++ b/asm/battle_controller_link_opponent.s
@@ -3576,7 +3576,7 @@ LinkOpponentHandleLoadPokeSprite: @ 803C3B4
lsls r1, 24
lsrs r1, 24
adds r0, r4, 0
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _0803C4E8 @ =gMultiuseSpriteTemplate
mov r8, r0
ldrb r0, [r6]
@@ -3780,7 +3780,7 @@ sub_803C550: @ 803C550
lsls r1, 24
lsrs r1, 24
mov r0, r8
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _0803C6C0 @ =gMultiuseSpriteTemplate
mov r9, r0
adds r0, r6, 0
diff --git a/asm/battle_controller_link_partner.s b/asm/battle_controller_link_partner.s
index 0087859c4..0398914cb 100644
--- a/asm/battle_controller_link_partner.s
+++ b/asm/battle_controller_link_partner.s
@@ -3370,7 +3370,7 @@ LinkPartnerHandleLoadPokeSprite: @ 80D5DB4
lsls r1, 24
lsrs r1, 24
adds r0, r4, 0
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _080D5EB4 @ =gMultiuseSpriteTemplate
mov r8, r0
ldrb r0, [r6]
@@ -3562,7 +3562,7 @@ sub_80D5F40: @ 80D5F40
lsls r1, 24
lsrs r1, 24
mov r0, r8
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _080D6098 @ =gMultiuseSpriteTemplate
mov r10, r0
adds r0, r6, 0
diff --git a/asm/battle_controller_oak.s b/asm/battle_controller_oak.s
index 7ccd33f5d..cd2495a35 100644
--- a/asm/battle_controller_oak.s
+++ b/asm/battle_controller_oak.s
@@ -7071,7 +7071,7 @@ sub_80EAF34: @ 80EAF34
lsls r1, 24
lsrs r1, 24
mov r0, r8
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _080EB094 @ =gMultiuseSpriteTemplate
mov r10, r0
adds r0, r6, 0
diff --git a/asm/battle_controller_opponent.s b/asm/battle_controller_opponent.s
index f1585b5e7..c7223984e 100644
--- a/asm/battle_controller_opponent.s
+++ b/asm/battle_controller_opponent.s
@@ -3649,7 +3649,7 @@ _080378AA:
lsls r1, 24
lsrs r1, 24
mov r0, r8
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r6, _080379A0 @ =gMultiuseSpriteTemplate
ldrb r0, [r7]
movs r1, 0x2
@@ -3872,7 +3872,7 @@ sub_8037A28: @ 8037A28
lsls r1, 24
lsrs r1, 24
mov r0, r8
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _08037B98 @ =gMultiuseSpriteTemplate
mov r9, r0
adds r0, r6, 0
diff --git a/asm/battle_controller_player.s b/asm/battle_controller_player.s
index 9a2ef0f7d..370fa7ee8 100644
--- a/asm/battle_controller_player.s
+++ b/asm/battle_controller_player.s
@@ -7442,7 +7442,7 @@ sub_8031FF4: @ 8031FF4
lsls r1, 24
lsrs r1, 24
mov r0, r8
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _0803214C @ =gMultiuseSpriteTemplate
mov r10, r0
adds r0, r6, 0
diff --git a/asm/battle_controller_pokedude.s b/asm/battle_controller_pokedude.s
index 37e3d688a..3eb6ecb33 100644
--- a/asm/battle_controller_pokedude.s
+++ b/asm/battle_controller_pokedude.s
@@ -3932,7 +3932,7 @@ sub_81580E0: @ 81580E0
lsls r1, 24
lsrs r1, 24
mov r0, r8
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _08158220 @ =gMultiuseSpriteTemplate
mov r9, r0
ldrb r0, [r6]
@@ -6336,7 +6336,7 @@ sub_8159478: @ 8159478
lsls r1, 24
lsrs r1, 24
mov r0, r8
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _081595D8 @ =gMultiuseSpriteTemplate
mov r10, r0
adds r0, r6, 0
diff --git a/asm/battle_setup.s b/asm/battle_setup.s
index 529787bf6..f4e1fdf0a 100644
--- a/asm/battle_setup.s
+++ b/asm/battle_setup.s
@@ -42,7 +42,7 @@ _0807F65E:
cmp r0, 0x1
bne _0807F686
bl sub_812B484
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r0, _0807F68C @ =sub_800FD9C
bl SetMainCallback2
bl sub_806D7E8
@@ -636,9 +636,9 @@ _0807FB74: .4byte 0x01000100
_0807FB78: .4byte gUnknown_2023E8A
_0807FB7C: .4byte c2_whiteout
_0807FB80:
- ldr r0, _0807FB94 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _0807FB94 @ =CB2_ReturnToField
bl SetMainCallback2
- ldr r1, _0807FB98 @ =gUnknown_3005020
+ ldr r1, _0807FB98 @ =gFieldCallback
ldr r0, _0807FB9C @ =sub_807E3EC
str r0, [r1]
_0807FB8C:
@@ -646,8 +646,8 @@ _0807FB8C:
pop {r0}
bx r0
.align 2, 0
-_0807FB94: .4byte c2_exit_to_overworld_2_switch
-_0807FB98: .4byte gUnknown_3005020
+_0807FB94: .4byte CB2_ReturnToField
+_0807FB98: .4byte gFieldCallback
_0807FB9C: .4byte sub_807E3EC
thumb_func_end sub_807FB40
diff --git a/asm/battle_tower.s b/asm/battle_tower.s
index e4c7f17ba..0f268a320 100644
--- a/asm/battle_tower.s
+++ b/asm/battle_tower.s
@@ -2033,7 +2033,7 @@ sub_80E68C4: @ 80E68C4
ldr r0, _080E68F4 @ =gMain
ldr r1, _080E68F8 @ =sub_80E6854
str r1, [r0, 0x8]
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r0, _080E68FC @ =sub_800FD9C
bl SetMainCallback2
adds r0, r4, 0
diff --git a/asm/unk_814B6F0.s b/asm/berry_crush.s
index 8cf90cd23..eb5e8d08d 100644
--- a/asm/unk_814B6F0.s
+++ b/asm/berry_crush.s
@@ -39,7 +39,7 @@ _0814B716:
str r0, [r5]
adds r0, r4, 0
bl SetMainCallback2
- ldr r0, _0814B748 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _0814B748 @ =CB2_ReturnToField
cmp r4, r0
bne _0814B73E
ldr r0, _0814B74C @ =0x0000012f
@@ -53,7 +53,7 @@ _0814B740:
pop {r1}
bx r1
.align 2, 0
-_0814B748: .4byte c2_exit_to_overworld_2_switch
+_0814B748: .4byte CB2_ReturnToField
_0814B74C: .4byte 0x0000012f
_0814B750: .4byte sub_8056534
thumb_func_end sub_814B6FC
diff --git a/asm/unk_814BB4C.s b/asm/berry_crush_2.s
index 5ad566185..7477bbf9c 100644
--- a/asm/unk_814BB4C.s
+++ b/asm/berry_crush_2.s
@@ -2949,7 +2949,7 @@ _0814D1CA:
bl sub_80F7858
b _0814D230
_0814D1D0:
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r4, r0, 24
movs r0, 0x2
diff --git a/asm/unk_814D5C8.s b/asm/berry_crush_3.s
index 23968f655..23968f655 100644
--- a/asm/unk_814D5C8.s
+++ b/asm/berry_crush_3.s
diff --git a/asm/cable_club.s b/asm/cable_club.s
index c7d8a86a6..91ddde46d 100644
--- a/asm/cable_club.s
+++ b/asm/cable_club.s
@@ -1631,7 +1631,7 @@ _08081410:
_08081418:
str r0, [r1]
_0808141A:
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r1, _08081444 @ =gTrainerBattleOpponent_A
movs r2, 0x80
lsls r2, 4
@@ -1854,7 +1854,7 @@ _080815E0:
_080815E8:
str r0, [r1]
_080815EA:
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r1, _08081614 @ =gTrainerBattleOpponent_A
movs r3, 0x80
lsls r3, 4
@@ -1905,14 +1905,14 @@ _0808164C:
lsls r0, 24
cmp r0, 0
beq _0808165C
- ldr r0, _08081664 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _08081664 @ =CB2_ReturnToField
bl SetMainCallback2
_0808165C:
pop {r4}
pop {r0}
bx r0
.align 2, 0
-_08081664: .4byte c2_exit_to_overworld_2_switch
+_08081664: .4byte CB2_ReturnToField
thumb_func_end sub_8081624
thumb_func_start sub_8081668
diff --git a/asm/clear_save_data_screen.s b/asm/clear_save_data_screen.s
index 84dd082f6..c92e072cb 100644
--- a/asm/clear_save_data_screen.s
+++ b/asm/clear_save_data_screen.s
@@ -152,7 +152,7 @@ _080F569C:
movs r1, 0x2
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
movs r0, 0
bl CopyBgTilemapBufferToVram
b _080F56E2
@@ -204,7 +204,7 @@ sub_80F5708: @ 80F5708
ldrb r0, [r0]
cmp r0, 0
bne _080F578C
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r4, r0, 24
movs r0, 0x1
diff --git a/asm/credits.s b/asm/credits.s
index 0413aac97..d6b72605b 100644
--- a/asm/credits.s
+++ b/asm/credits.s
@@ -177,7 +177,7 @@ sub_80F3B04: @ 80F3B04
beq _080F3B20
ldrb r0, [r1, 0xA]
bl RemoveWindow
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r1, [r4]
movs r0, 0
strb r0, [r1, 0xB]
@@ -1279,13 +1279,13 @@ _080F4374:
movs r0, 0x1
adds r2, r5, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r1, _080F44B4 @ =gUnknown_840C650
str r4, [sp]
movs r0, 0x2
adds r2, r5, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r1, _080F44B8 @ =gUnknown_8EAB30C
movs r2, 0xA0
lsls r2, 3
@@ -1293,14 +1293,14 @@ _080F4374:
str r4, [sp]
movs r0, 0x1
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r1, _080F44BC @ =gUnknown_840CA54
movs r2, 0x80
lsls r2, 3
str r4, [sp]
movs r0, 0x2
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r0, [r6]
ldrb r0, [r0, 0x9]
lsls r0, 5
@@ -1620,7 +1620,7 @@ _080F46A0:
str r5, [sp]
movs r0, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r0, [r6]
ldrb r1, [r0, 0x9]
lsls r0, r1, 1
@@ -1635,7 +1635,7 @@ _080F46A0:
str r0, [sp]
movs r0, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r0, [r6]
ldrb r1, [r0, 0x9]
lsls r0, r1, 1
diff --git a/asm/unk_81507FC.s b/asm/dodrio_berry_picking.s
index 19b2b2c43..19b2b2c43 100644
--- a/asm/unk_81507FC.s
+++ b/asm/dodrio_berry_picking.s
diff --git a/asm/egg_hatch.s b/asm/egg_hatch.s
index 914012da5..2428f2984 100644
--- a/asm/egg_hatch.s
+++ b/asm/egg_hatch.s
@@ -5,1816 +5,4 @@
.text
- thumb_func_start sub_8046BFC
-sub_8046BFC: @ 8046BFC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x50
- adds r6, r0, 0
- adds r5, r1, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x3C]
- movs r4, 0
- add r7, sp, 0x18
- movs r0, 0x31
- add r0, sp
- mov r10, r0
- mov r1, sp
- adds r1, 0x32
- str r1, [sp, 0x40]
- mov r0, sp
- adds r0, 0x34
- str r0, [sp, 0x48]
- add r1, sp, 0x30
- mov r9, r1
- subs r0, 0x1
- str r0, [sp, 0x44]
- mov r1, sp
- adds r1, 0x38
- str r1, [sp, 0x4C]
-_08046C3C:
- adds r1, r4, 0
- adds r1, 0xD
- adds r0, r6, 0
- bl GetMonData
- lsls r1, r4, 1
- add r1, sp
- adds r1, 0x10
- strh r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _08046C3C
- adds r0, r6, 0
- movs r1, 0
- bl GetMonData
- mov r8, r0
- movs r4, 0
-_08046C64:
- adds r1, r4, 0
- adds r1, 0x27
- adds r0, r6, 0
- bl GetMonData
- lsls r1, r4, 2
- adds r1, r7, r1
- str r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _08046C64
- adds r0, r6, 0
- movs r1, 0x25
- bl GetMonData
- mov r1, r10
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x8
- bl GetMonData
- ldr r1, [sp, 0x40]
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x22
- bl GetMonData
- str r0, [sp, 0x38]
- adds r0, r6, 0
- movs r1, 0x50
- bl GetMonData
- ldr r1, [sp, 0x48]
- strb r0, [r1]
- movs r0, 0x1
- str r0, [sp]
- mov r0, r8
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- adds r0, r5, 0
- ldr r1, [sp, 0x3C]
- movs r2, 0x5
- movs r3, 0x20
- bl CreateMon
- movs r4, 0
-_08046CC8:
- adds r1, r4, 0
- adds r1, 0xD
- lsls r0, r4, 1
- mov r2, sp
- adds r2, r0
- adds r2, 0x10
- adds r0, r5, 0
- bl SetMonData
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _08046CC8
- movs r4, 0
-_08046CE6:
- adds r1, r4, 0
- adds r1, 0x27
- lsls r2, r4, 2
- adds r2, r7, r2
- adds r0, r5, 0
- bl SetMonData
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _08046CE6
- movs r0, 0x2
- mov r1, r9
- strb r0, [r1]
- adds r0, r5, 0
- movs r1, 0x3
- mov r2, r9
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0x25
- mov r2, r10
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0x8
- ldr r2, [sp, 0x40]
- bl SetMonData
- movs r0, 0x78
- ldr r1, [sp, 0x44]
- strb r0, [r1]
- adds r0, r5, 0
- movs r1, 0x20
- ldr r2, [sp, 0x44]
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0x22
- ldr r2, [sp, 0x4C]
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0x50
- ldr r2, [sp, 0x48]
- bl SetMonData
- adds r0, r6, 0
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- add sp, 0x50
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8046BFC
-
- thumb_func_start AddHatchedMonToParty
-AddHatchedMonToParty: @ 8046D60
- push {r4,r5,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r0, 24
- add r4, sp, 0xC
- movs r1, 0x46
- strb r1, [r4]
- movs r1, 0x64
- adds r5, r0, 0
- muls r5, r1
- ldr r0, _08046E14 @ =gPlayerParty
- adds r5, r0
- ldr r1, _08046E18 @ =gEnemyParty
- adds r0, r5, 0
- bl sub_8046BFC
- adds r0, r5, 0
- movs r1, 0x2D
- adds r2, r4, 0
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, sp
- adds r1, r4, 0
- bl GetSpeciesName
- adds r0, r5, 0
- movs r1, 0x2
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- bl SpeciesToNationalPokedexNum
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r4, 0
- movs r1, 0x2
- bl GetSetPokedexFlag
- adds r0, r4, 0
- movs r1, 0x3
- bl GetSetPokedexFlag
- ldr r1, _08046E1C @ =gStringVar1
- adds r0, r5, 0
- bl GetMonNick
- mov r2, sp
- adds r2, 0xE
- movs r0, 0x4
- strh r0, [r2]
- adds r0, r5, 0
- movs r1, 0x26
- bl SetMonData
- add r2, sp, 0x10
- movs r0, 0
- strh r0, [r2]
- adds r0, r5, 0
- movs r1, 0x24
- bl SetMonData
- bl sav1_map_get_name
- mov r2, sp
- adds r2, 0x12
- strb r0, [r2]
- adds r0, r5, 0
- movs r1, 0x23
- bl SetMonData
- adds r0, r5, 0
- bl MonRestorePP
- adds r0, r5, 0
- bl CalculateMonStats
- add sp, 0x14
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08046E14: .4byte gPlayerParty
-_08046E18: .4byte gEnemyParty
-_08046E1C: .4byte gStringVar1
- thumb_func_end AddHatchedMonToParty
-
- thumb_func_start ScriptHatchMon
-ScriptHatchMon: @ 8046E20
- push {lr}
- ldr r0, _08046E30 @ =gSpecialVar_0x8004
- ldrb r0, [r0]
- bl AddHatchedMonToParty
- pop {r0}
- bx r0
- .align 2, 0
-_08046E30: .4byte gSpecialVar_0x8004
- thumb_func_end ScriptHatchMon
-
- thumb_func_start sub_8046E34
-sub_8046E34: @ 8046E34
- push {r4,r5,lr}
- sub sp, 0x20
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0x8C
- muls r1, r2
- adds r4, r0, r1
- adds r0, r4, 0
- mov r1, sp
- bl GetBoxMonNick
- adds r0, r4, 0
- adds r0, 0x70
- ldrh r0, [r0]
- cmp r0, 0
- beq _08046EA0
- adds r5, r4, 0
- adds r5, 0x7C
- mov r0, sp
- adds r1, r5, 0
- bl StringCompare
- adds r4, 0x74
- cmp r0, 0
- bne _08046E74
- ldr r0, _08046E90 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- adds r1, r4, 0
- bl StringCompare
- cmp r0, 0
- beq _08046EA0
-_08046E74:
- ldr r0, _08046E94 @ =gStringVar1
- mov r1, sp
- bl StringCopy
- ldr r0, _08046E98 @ =gStringVar2
- adds r1, r4, 0
- bl StringCopy
- ldr r0, _08046E9C @ =gStringVar3
- adds r1, r5, 0
- bl StringCopy
- movs r0, 0x1
- b _08046EA2
- .align 2, 0
-_08046E90: .4byte gSaveBlock2Ptr
-_08046E94: .4byte gStringVar1
-_08046E98: .4byte gStringVar2
-_08046E9C: .4byte gStringVar3
-_08046EA0:
- movs r0, 0
-_08046EA2:
- add sp, 0x20
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8046E34
-
- thumb_func_start sub_8046EAC
-sub_8046EAC: @ 8046EAC
- push {lr}
- ldr r0, _08046EC8 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- ldr r1, _08046ECC @ =gSpecialVar_0x8004
- ldrb r1, [r1]
- bl sub_8046E34
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08046EC8: .4byte gSaveBlock1Ptr
-_08046ECC: .4byte gSpecialVar_0x8004
- thumb_func_end sub_8046EAC
-
- thumb_func_start sub_8046ED0
-sub_8046ED0: @ 8046ED0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r3
- lsls r0, 24
- lsrs r3, r0, 24
- mov r8, r3
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r1, r2, 24
- adds r2, r1, 0
- movs r4, 0
- movs r7, 0
- movs r5, 0
- cmp r3, 0
- bne _08046EFE
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08046F18 @ =gPlayerParty
- adds r5, r1, r0
- movs r4, 0x1
-_08046EFE:
- cmp r3, 0x1
- bne _08046F0E
- movs r0, 0x64
- adds r1, r2, 0
- muls r1, r0
- ldr r0, _08046F18 @ =gPlayerParty
- adds r5, r1, r0
- movs r4, 0x3
-_08046F0E:
- cmp r6, 0
- beq _08046F1C
- cmp r6, 0x1
- beq _08046F6C
- b _08046FA6
- .align 2, 0
-_08046F18: .4byte gPlayerParty
-_08046F1C:
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0
- bl GetMonData
- adds r3, r0, 0
- lsls r0, r4, 3
- ldr r1, _08046F64 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _08046F68 @ =gMonSpritesGfxPtr
- ldr r2, [r1]
- mov r6, r8
- lsls r1, r6, 1
- adds r1, 0x1
- lsls r1, 2
- adds r2, 0x4
- adds r2, r1
- ldr r1, [r2]
- adds r2, r4, 0
- bl sub_800ECC4
- adds r0, r5, 0
- bl GetMonSpritePalStruct
- bl LoadCompressedObjectPalette
- mov r0, r9
- strh r4, [r0]
- b _08046FA6
- .align 2, 0
-_08046F64: .4byte gMonFrontPicTable
-_08046F68: .4byte gMonSpritesGfxPtr
-_08046F6C:
- adds r0, r5, 0
- bl GetMonSpritePalStruct
- ldrh r0, [r0, 0x4]
- adds r1, r4, 0
- bl sub_803F7D4
- ldr r0, _08046FB4 @ =gMultiuseSpriteTemplate
- movs r1, 0x78
- movs r2, 0x46
- movs r3, 0x6
- bl CreateSprite
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r4, _08046FB8 @ =gSprites
- lsls r1, r7, 4
- adds r1, r7
- lsls r1, 2
- adds r2, r1, r4
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r2]
- adds r4, 0x1C
- adds r1, r4
- ldr r0, _08046FBC @ =SpriteCallbackDummy
- str r0, [r1]
-_08046FA6:
- adds r0, r7, 0
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08046FB4: .4byte gMultiuseSpriteTemplate
-_08046FB8: .4byte gSprites
-_08046FBC: .4byte SpriteCallbackDummy
- thumb_func_end sub_8046ED0
-
- thumb_func_start sub_8046FC0
-sub_8046FC0: @ 8046FC0
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_8046FC0
-
- thumb_func_start sub_8046FD4
-sub_8046FD4: @ 8046FD4
- push {lr}
- sub sp, 0x4
- bl ScriptContext2_Enable
- ldr r0, _08047000 @ =sub_8047004
- movs r1, 0xA
- bl CreateTask
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl sub_812B478
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_08047000: .4byte sub_8047004
- thumb_func_end sub_8046FD4
-
- thumb_func_start sub_8047004
-sub_8047004: @ 8047004
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08047034 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0804702C
- bl sub_80563F0
- ldr r0, _08047038 @ =CB2_EggHatch_0
- bl SetMainCallback2
- ldr r1, _0804703C @ =gUnknown_3005020
- ldr r0, _08047040 @ =sub_807DD24
- str r0, [r1]
- adds r0, r4, 0
- bl DestroyTask
-_0804702C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08047034: .4byte gPaletteFade
-_08047038: .4byte CB2_EggHatch_0
-_0804703C: .4byte gUnknown_3005020
-_08047040: .4byte sub_807DD24
- thumb_func_end sub_8047004
-
- thumb_func_start CB2_EggHatch_0
-CB2_EggHatch_0: @ 8047044
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _08047064 @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x8
- bls _08047058
- b _0804727A
-_08047058:
- lsls r0, 2
- ldr r1, _08047068 @ =_0804706C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08047064: .4byte gMain
-_08047068: .4byte _0804706C
- .align 2, 0
-_0804706C:
- .4byte _08047090
- .4byte _0804715C
- .4byte _08047174
- .4byte _080471A8
- .4byte _080471C8
- .4byte _080471E0
- .4byte _080471F8
- .4byte _08047214
- .4byte _0804726C
-_08047090:
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- ldr r4, _08047148 @ =gUnknown_3000E74
- movs r0, 0x14
- bl Alloc
- str r0, [r4]
- bl AllocateMonSpritesGfx
- ldr r2, [r4]
- ldr r0, _0804714C @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- movs r1, 0
- strb r0, [r2, 0x4]
- ldr r0, [r4]
- strb r1, [r0, 0x7]
- ldr r0, _08047150 @ =sub_8046FC0
- bl SetVBlankCallback
- bl GetCurrentMapMusic
- ldr r1, _08047154 @ =gSpecialVar_0x8005
- strh r0, [r1]
- bl reset_temp_tile_data_buffers
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _08047158 @ =gUnknown_826019C
- movs r0, 0
- movs r2, 0x2
- bl InitBgsFromTemplates
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0x7
- movs r2, 0x2
- bl SetBgAttribute
- movs r0, 0x80
- lsls r0, 5
- bl Alloc
- adds r1, r0, 0
- movs r0, 0x1
- bl SetBgTilemapBuffer
- movs r0, 0x80
- lsls r0, 6
- bl Alloc
- adds r1, r0, 0
- movs r0, 0
- bl SetBgTilemapBuffer
- bl DeactivateAllTextPrinters
- bl ResetPaletteFade
- bl FreeAllSpritePalettes
- bl ResetSpriteData
- bl ResetTasks
- bl ScanlineEffect_Stop
- bl m4aSoundVSyncOn
- b _0804724A
- .align 2, 0
-_08047148: .4byte gUnknown_3000E74
-_0804714C: .4byte gSpecialVar_0x8004
-_08047150: .4byte sub_8046FC0
-_08047154: .4byte gSpecialVar_0x8005
-_08047158: .4byte gUnknown_826019C
-_0804715C:
- ldr r0, _0804716C @ =gUnknown_82601A4
- bl InitWindows
- ldr r0, _08047170 @ =gUnknown_3000E74
- ldr r1, [r0]
- movs r0, 0
- strb r0, [r1, 0x8]
- b _0804724A
- .align 2, 0
-_0804716C: .4byte gUnknown_82601A4
-_08047170: .4byte gUnknown_3000E74
-_08047174:
- ldr r1, _0804719C @ =gUnknown_8D00000
- movs r0, 0
- str r0, [sp]
- movs r2, 0
- movs r3, 0
- bl sub_80F696C
- ldr r1, _080471A0 @ =gFile_graphics_interface_menu_map_tilemap
- movs r0, 0
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- ldr r0, _080471A4 @ =gUnknown_8D004D8
- movs r1, 0
- movs r2, 0x20
- bl LoadCompressedPalette
- b _0804724A
- .align 2, 0
-_0804719C: .4byte gUnknown_8D00000
-_080471A0: .4byte gFile_graphics_interface_menu_map_tilemap
-_080471A4: .4byte gUnknown_8D004D8
-_080471A8:
- ldr r0, _080471BC @ =gUnknown_826011C
- bl LoadSpriteSheet
- ldr r0, _080471C0 @ =gUnknown_8260124
- bl LoadSpriteSheet
- ldr r0, _080471C4 @ =gUnknown_826012C
- bl LoadSpritePalette
- b _0804724A
- .align 2, 0
-_080471BC: .4byte gUnknown_826011C
-_080471C0: .4byte gUnknown_8260124
-_080471C4: .4byte gUnknown_826012C
-_080471C8:
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- ldr r0, _080471DC @ =gUnknown_3000E74
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- bl AddHatchedMonToParty
- b _0804724A
- .align 2, 0
-_080471DC: .4byte gUnknown_3000E74
-_080471E0:
- ldr r0, _080471F4 @ =gUnknown_3000E74
- ldr r3, [r0]
- ldrb r2, [r3, 0x4]
- adds r3, 0xC
- movs r0, 0
- movs r1, 0
- bl sub_8046ED0
- b _0804724A
- .align 2, 0
-_080471F4: .4byte gUnknown_3000E74
-_080471F8:
- ldr r4, _08047210 @ =gUnknown_3000E74
- ldr r3, [r4]
- ldrb r2, [r3, 0x4]
- adds r3, 0xC
- movs r0, 0
- movs r1, 0x1
- bl sub_8046ED0
- ldr r1, [r4]
- strb r0, [r1, 0x1]
- b _0804724A
- .align 2, 0
-_08047210: .4byte gUnknown_3000E74
-_08047214:
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, _0804725C @ =gUnknown_8EAEA20
- movs r1, 0x10
- movs r2, 0xA0
- bl LoadPalette
- ldr r1, _08047260 @ =gUnknown_8EAEA80
- movs r2, 0xA1
- lsls r2, 5
- movs r0, 0x1
- movs r3, 0
- bl LoadBgTiles
- ldr r1, _08047264 @ =gUnknown_826601C
- movs r2, 0x80
- lsls r2, 5
- movs r0, 0x1
- movs r3, 0
- bl CopyToBgTilemapBuffer
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
-_0804724A:
- ldr r1, _08047268 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0804727A
- .align 2, 0
-_0804725C: .4byte gUnknown_8EAEA20
-_08047260: .4byte gUnknown_8EAEA80
-_08047264: .4byte gUnknown_826601C
-_08047268: .4byte gMain
-_0804726C:
- ldr r0, _08047298 @ =sub_8047338
- bl SetMainCallback2
- ldr r0, _0804729C @ =gUnknown_3000E74
- ldr r1, [r0]
- movs r0, 0
- strb r0, [r1, 0x2]
-_0804727A:
- bl RunTasks
- bl RunTextPrinters
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08047298: .4byte sub_8047338
-_0804729C: .4byte gUnknown_3000E74
- thumb_func_end CB2_EggHatch_0
-
- thumb_func_start EggHatchSetMonNickname
-EggHatchSetMonNickname: @ 80472A0
- push {lr}
- ldr r0, _080472D0 @ =gSpecialVar_0x8004
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080472D4 @ =gPlayerParty
- adds r0, r1
- ldr r2, _080472D8 @ =gStringVar3
- movs r1, 0x2
- bl SetMonData
- bl FreeMonSpritesGfx
- ldr r0, _080472DC @ =gUnknown_3000E74
- ldr r0, [r0]
- bl Free
- bl sub_812B484
- ldr r0, _080472E0 @ =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_080472D0: .4byte gSpecialVar_0x8004
-_080472D4: .4byte gPlayerParty
-_080472D8: .4byte gStringVar3
-_080472DC: .4byte gUnknown_3000E74
-_080472E0: .4byte c2_exit_to_overworld_2_switch
- thumb_func_end EggHatchSetMonNickname
-
- thumb_func_start sub_80472E4
-sub_80472E4: @ 80472E4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08047330 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08047300
- bl StopMapMusic
-_08047300:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _0804730E
- ldr r0, _08047334 @ =0x00000107
- bl PlayBGM
-_0804730E:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x3C
- ble _08047324
- movs r0, 0x84
- lsls r0, 1
- bl PlayBGM
- adds r0, r5, 0
- bl DestroyTask
-_08047324:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08047330: .4byte gTasks
-_08047334: .4byte 0x00000107
- thumb_func_end sub_80472E4
-
- thumb_func_start sub_8047338
-sub_8047338: @ 8047338
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0xC
- ldr r1, _0804735C @ =gUnknown_3000E74
- ldr r0, [r1]
- ldrb r0, [r0, 0x2]
- adds r5, r1, 0
- cmp r0, 0xC
- bls _08047352
- b _08047684
-_08047352:
- lsls r0, 2
- ldr r1, _08047360 @ =_08047364
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0804735C: .4byte gUnknown_3000E74
-_08047360: .4byte _08047364
- .align 2, 0
-_08047364:
- .4byte _08047398
- .4byte _080473E4
- .4byte _0804740C
- .4byte _08047444
- .4byte _08047474
- .4byte _08047482
- .4byte _080474E8
- .4byte _080474F6
- .4byte _08047504
- .4byte _08047548
- .4byte _08047588
- .4byte _08047634
- .4byte _08047654
-_08047398:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _080473D8 @ =gUnknown_8260134
- movs r1, 0x78
- movs r2, 0x4B
- movs r3, 0x5
- bl CreateSprite
- ldr r4, _080473DC @ =gUnknown_3000E74
- ldr r1, [r4]
- strb r0, [r1]
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- ldr r1, [r4]
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
- ldr r0, _080473E0 @ =sub_80472E4
- movs r1, 0x5
- bl CreateTask
- b _08047684
- .align 2, 0
-_080473D8: .4byte gUnknown_8260134
-_080473DC: .4byte gUnknown_3000E74
-_080473E0: .4byte sub_80472E4
-_080473E4:
- ldr r0, _08047408 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080473F6
- b _08047684
-_080473F6:
- ldr r0, [r5]
- ldrb r0, [r0, 0x8]
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r0, [r5]
- strb r4, [r0, 0x3]
- ldr r1, [r5]
- b _08047648
- .align 2, 0
-_08047408: .4byte gPaletteFade
-_0804740C:
- ldr r1, [r5]
- ldrb r0, [r1, 0x3]
- adds r0, 0x1
- strb r0, [r1, 0x3]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1E
- bhi _0804741E
- b _08047684
-_0804741E:
- ldr r1, [r5]
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
- ldr r2, _0804743C @ =gSprites
- ldr r0, [r5]
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _08047440 @ =SpriteCB_Egg_0
- str r1, [r0]
- b _08047684
- .align 2, 0
-_0804743C: .4byte gSprites
-_08047440: .4byte SpriteCB_Egg_0
-_08047444:
- ldr r2, _0804746C @ =gSprites
- ldr r3, [r5]
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _08047470 @ =SpriteCallbackDummy
- cmp r1, r0
- beq _0804745E
- b _08047684
-_0804745E:
- ldrh r0, [r3, 0xC]
- movs r1, 0
- bl PlayCry1
- ldr r1, [r5]
- b _08047648
- .align 2, 0
-_0804746C: .4byte gSprites
-_08047470: .4byte SpriteCallbackDummy
-_08047474:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _08047480
- b _08047684
-_08047480:
- b _08047644
-_08047482:
- ldr r0, [r5]
- ldrb r1, [r0, 0x4]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080474D4 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080474D8 @ =gStringVar1
- bl GetMonNick
- ldr r4, _080474DC @ =gStringVar4
- ldr r1, _080474E0 @ =gUnknown_841B6FD
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r0, [r5]
- ldrb r0, [r0, 0x8]
- movs r1, 0xFF
- str r1, [sp]
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0x3
- bl EggHatchPrintMessage
- ldr r0, _080474E4 @ =0x00000103
- bl PlayFanfare
- ldr r1, [r5]
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
- ldr r0, [r5]
- ldrb r0, [r0, 0x8]
- bl PutWindowTilemap
- ldr r0, [r5]
- ldrb r0, [r0, 0x8]
- movs r1, 0x3
- bl CopyWindowToVram
- b _08047684
- .align 2, 0
-_080474D4: .4byte gPlayerParty
-_080474D8: .4byte gStringVar1
-_080474DC: .4byte gStringVar4
-_080474E0: .4byte gUnknown_841B6FD
-_080474E4: .4byte 0x00000103
-_080474E8:
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- bne _080474F4
- b _08047684
-_080474F4:
- b _08047644
-_080474F6:
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- bne _08047502
- b _08047684
-_08047502:
- b _08047644
-_08047504:
- ldr r0, [r5]
- ldrb r1, [r0, 0x4]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08047538 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0804753C @ =gStringVar1
- bl GetMonNick
- ldr r4, _08047540 @ =gStringVar4
- ldr r1, _08047544 @ =gUnknown_841B716
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r0, [r5]
- ldrb r0, [r0, 0x8]
- movs r1, 0x1
- str r1, [sp]
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0x2
- bl EggHatchPrintMessage
- ldr r1, [r5]
- b _08047648
- .align 2, 0
-_08047538: .4byte gPlayerParty
-_0804753C: .4byte gStringVar1
-_08047540: .4byte gStringVar4
-_08047544: .4byte gUnknown_841B716
-_08047548:
- ldr r0, [r5]
- ldrb r0, [r0, 0x8]
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0
- beq _0804755A
- b _08047684
-_0804755A:
- ldr r0, [r5]
- ldrb r0, [r0, 0x8]
- movs r4, 0xA0
- lsls r4, 1
- adds r1, r4, 0
- movs r2, 0xE0
- bl sub_814FE40
- ldr r0, _08047584 @ =gUnknown_82601B4
- str r4, [sp]
- movs r1, 0xE
- str r1, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r1, 0x3
- movs r2, 0
- movs r3, 0x2
- bl sub_810FF60
- ldr r1, [r5]
- b _08047648
- .align 2, 0
-_08047584: .4byte gUnknown_82601B4
-_08047588:
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _080475A8
- cmp r1, 0
- bgt _080475A2
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08047644
- b _08047684
-_080475A2:
- cmp r1, 0x1
- beq _08047644
- b _08047684
-_080475A8:
- ldr r0, _08047624 @ =gUnknown_3000E74
- mov r9, r0
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- movs r1, 0x64
- mov r8, r1
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- ldr r6, _08047628 @ =gPlayerParty
- adds r0, r6
- ldr r1, _0804762C @ =gStringVar3
- mov r10, r1
- bl GetMonNick
- mov r1, r9
- ldr r0, [r1]
- ldrb r0, [r0, 0x4]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- mov r1, r9
- ldr r0, [r1]
- ldrb r0, [r0, 0x4]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- bl GetMonGender
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- mov r1, r9
- ldr r0, [r1]
- ldrb r0, [r0, 0x4]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- movs r1, 0
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- ldr r0, _08047630 @ =EggHatchSetMonNickname
- str r0, [sp, 0x4]
- movs r0, 0x3
- mov r1, r10
- adds r2, r5, 0
- adds r3, r4, 0
- bl DoNamingScreen
- b _08047684
- .align 2, 0
-_08047624: .4byte gUnknown_3000E74
-_08047628: .4byte gPlayerParty
-_0804762C: .4byte gStringVar3
-_08047630: .4byte EggHatchSetMonNickname
-_08047634:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_08047644:
- ldr r0, _08047650 @ =gUnknown_3000E74
- ldr r1, [r0]
-_08047648:
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
- b _08047684
- .align 2, 0
-_08047650: .4byte gUnknown_3000E74
-_08047654:
- ldr r0, _080476A8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08047684
- ldr r0, [r5]
- ldrb r0, [r0, 0x8]
- bl RemoveWindow
- movs r0, 0
- bl UnsetBgTilemapBuffer
- movs r0, 0x1
- bl UnsetBgTilemapBuffer
- ldr r0, [r5]
- bl Free
- ldr r0, _080476AC @ =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- bl sub_812B484
-_08047684:
- bl RunTasks
- bl RunTextPrinters
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080476A8: .4byte gPaletteFade
-_080476AC: .4byte c2_exit_to_overworld_2_switch
- thumb_func_end sub_8047338
-
- thumb_func_start SpriteCB_Egg_0
-SpriteCB_Egg_0: @ 80476B0
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _080476D0
- ldr r0, _080476CC @ =SpriteCB_Egg_1
- str r0, [r4, 0x1C]
- movs r0, 0
- strh r0, [r4, 0x2E]
- b _08047700
- .align 2, 0
-_080476CC: .4byte SpriteCB_Egg_1
-_080476D0:
- ldrh r0, [r4, 0x30]
- adds r0, 0x14
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x1
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- bne _08047700
- movs r0, 0x17
- bl PlaySE
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
- bl CreateRandomEggShardSprite
-_08047700:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_Egg_0
-
- thumb_func_start SpriteCB_Egg_1
-SpriteCB_Egg_1: @ 8047708
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1E
- ble _08047764
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _08047738
- ldr r0, _08047734 @ =SpriteCB_Egg_2
- str r0, [r4, 0x1C]
- strh r1, [r4, 0x2E]
- strh r1, [r4, 0x32]
- b _08047764
- .align 2, 0
-_08047734: .4byte SpriteCB_Egg_2
-_08047738:
- ldrh r0, [r4, 0x30]
- adds r0, 0x14
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x2
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- bne _08047764
- movs r0, 0x17
- bl PlaySE
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
-_08047764:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_Egg_1
-
- thumb_func_start SpriteCB_Egg_2
-SpriteCB_Egg_2: @ 804776C
- push {r4-r6,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- movs r6, 0
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1E
- ble _08047826
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x26
- ble _080477E4
- ldr r0, _080477D0 @ =SpriteCB_Egg_3
- str r0, [r4, 0x1C]
- strh r6, [r4, 0x2E]
- ldr r5, _080477D4 @ =gUnknown_3000E74
- ldr r0, [r5]
- ldrb r1, [r0, 0x4]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080477D8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- ldr r4, _080477DC @ =gSprites
- ldr r3, [r5]
- ldrb r2, [r3, 0x1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- strh r6, [r1, 0x24]
- ldrb r2, [r3, 0x1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldr r2, _080477E0 @ =gUnknown_82349CC
- lsrs r0, 14
- adds r0, r2
- ldrb r0, [r0, 0x1]
- strh r0, [r1, 0x26]
- b _08047826
- .align 2, 0
-_080477D0: .4byte SpriteCB_Egg_3
-_080477D4: .4byte gUnknown_3000E74
-_080477D8: .4byte gPlayerParty
-_080477DC: .4byte gSprites
-_080477E0: .4byte gUnknown_82349CC
-_080477E4:
- ldrh r0, [r4, 0x30]
- adds r0, 0x14
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x2
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- bne _08047818
- movs r0, 0x17
- bl PlaySE
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
- bl CreateRandomEggShardSprite
- bl CreateRandomEggShardSprite
-_08047818:
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1E
- bne _08047826
- movs r0, 0x17
- bl PlaySE
-_08047826:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_Egg_2
-
- thumb_func_start SpriteCB_Egg_3
-SpriteCB_Egg_3: @ 804782C
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x32
- ble _08047846
- ldr r0, _0804784C @ =SpriteCB_Egg_4
- str r0, [r1, 0x1C]
- movs r0, 0
- strh r0, [r1, 0x2E]
-_08047846:
- pop {r0}
- bx r0
- .align 2, 0
-_0804784C: .4byte SpriteCB_Egg_4
- thumb_func_end SpriteCB_Egg_3
-
- thumb_func_start SpriteCB_Egg_4
-SpriteCB_Egg_4: @ 8047850
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _08047870
- movs r1, 0x1
- negs r1, r1
- ldr r0, _080478C4 @ =0x0000ffff
- str r0, [sp]
- adds r0, r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_08047870:
- ldrh r0, [r5, 0x2E]
- cmp r0, 0x3
- bhi _0804788C
- movs r4, 0
-_08047878:
- bl CreateRandomEggShardSprite
- lsls r0, r4, 16
- movs r1, 0x80
- lsls r1, 9
- adds r0, r1
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x3
- ble _08047878
-_0804788C:
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- ldr r0, _080478C8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080478BA
- movs r0, 0x6A
- bl PlaySE
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _080478CC @ =SpriteCB_Egg_5
- str r0, [r5, 0x1C]
- strh r4, [r5, 0x2E]
-_080478BA:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080478C4: .4byte 0x0000ffff
-_080478C8: .4byte gPaletteFade
-_080478CC: .4byte SpriteCB_Egg_5
- thumb_func_end SpriteCB_Egg_4
-
- thumb_func_start SpriteCB_Egg_5
-SpriteCB_Egg_5: @ 80478D0
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0804790C
- ldr r4, _08047960 @ =gSprites
- ldr r3, _08047964 @ =gUnknown_3000E74
- ldr r0, [r3]
- ldrb r1, [r0, 0x1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- ldr r0, [r3]
- ldrb r1, [r0, 0x1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x1
- bl StartSpriteAffineAnim
-_0804790C:
- movs r2, 0x2E
- ldrsh r0, [r5, r2]
- cmp r0, 0x8
- bne _08047926
- movs r1, 0x1
- negs r1, r1
- ldr r0, _08047968 @ =0x0000ffff
- str r0, [sp]
- adds r0, r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_08047926:
- movs r1, 0x2E
- ldrsh r0, [r5, r1]
- cmp r0, 0x9
- bgt _08047944
- ldr r2, _08047960 @ =gSprites
- ldr r0, _08047964 @ =gUnknown_3000E74
- ldr r0, [r0]
- ldrb r1, [r0, 0x1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x22]
- subs r1, 0x1
- strh r1, [r0, 0x22]
-_08047944:
- ldrh r1, [r5, 0x2E]
- movs r2, 0x2E
- ldrsh r0, [r5, r2]
- cmp r0, 0x28
- ble _08047952
- ldr r0, _0804796C @ =SpriteCallbackDummy
- str r0, [r5, 0x1C]
-_08047952:
- adds r0, r1, 0x1
- strh r0, [r5, 0x2E]
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08047960: .4byte gSprites
-_08047964: .4byte gUnknown_3000E74
-_08047968: .4byte 0x0000ffff
-_0804796C: .4byte SpriteCallbackDummy
- thumb_func_end SpriteCB_Egg_5
-
- thumb_func_start SpriteCB_EggShard
-SpriteCB_EggShard: @ 8047970
- push {r4,lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x30]
- ldrh r1, [r2, 0x36]
- adds r0, r1
- strh r0, [r2, 0x36]
- ldrh r1, [r2, 0x32]
- ldrh r3, [r2, 0x38]
- adds r0, r1, r3
- strh r0, [r2, 0x38]
- movs r4, 0x36
- ldrsh r0, [r2, r4]
- cmp r0, 0
- bge _0804798E
- adds r0, 0xFF
-_0804798E:
- asrs r0, 8
- strh r0, [r2, 0x24]
- movs r3, 0x38
- ldrsh r0, [r2, r3]
- cmp r0, 0
- bge _0804799C
- adds r0, 0xFF
-_0804799C:
- asrs r0, 8
- strh r0, [r2, 0x26]
- ldrh r0, [r2, 0x34]
- adds r3, r1, r0
- strh r3, [r2, 0x32]
- movs r4, 0x22
- ldrsh r1, [r2, r4]
- movs r4, 0x26
- ldrsh r0, [r2, r4]
- adds r0, r1, r0
- adds r1, 0x14
- cmp r0, r1
- ble _080479C2
- lsls r0, r3, 16
- cmp r0, 0
- ble _080479C2
- adds r0, r2, 0
- bl DestroySprite
-_080479C2:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_EggShard
-
- thumb_func_start CreateRandomEggShardSprite
-CreateRandomEggShardSprite: @ 80479C8
- push {r4-r6,lr}
- sub sp, 0x8
- ldr r2, _08047A14 @ =gUnknown_82601BC
- ldr r0, _08047A18 @ =gUnknown_3000E74
- ldr r6, [r0]
- ldrb r3, [r6, 0x7]
- lsls r0, r3, 2
- adds r1, r0, r2
- ldrh r5, [r1]
- adds r2, 0x2
- adds r0, r2
- ldrh r4, [r0]
- adds r3, 0x1
- strb r3, [r6, 0x7]
- bl Random
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- lsls r5, 16
- asrs r5, 16
- lsls r4, 16
- asrs r4, 16
- movs r0, 0x64
- str r0, [sp]
- lsrs r1, 16
- str r1, [sp, 0x4]
- movs r0, 0x78
- movs r1, 0x3C
- adds r2, r5, 0
- adds r3, r4, 0
- bl CreateEggShardSprite
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08047A14: .4byte gUnknown_82601BC
-_08047A18: .4byte gUnknown_3000E74
- thumb_func_end CreateRandomEggShardSprite
-
- thumb_func_start CreateEggShardSprite
-CreateEggShardSprite: @ 8047A1C
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- mov r8, r3
- ldr r0, [sp, 0x1C]
- mov r9, r0
- ldr r1, [sp, 0x20]
- mov r10, r1
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 16
- lsrs r6, 16
- mov r0, r8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- mov r1, r9
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- mov r0, r10
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, _08047A94 @ =gUnknown_8260184
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0x4
- bl CreateSprite
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _08047A98 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r6, [r0, 0x30]
- mov r1, r8
- strh r1, [r0, 0x32]
- mov r1, r9
- strh r1, [r0, 0x34]
- mov r1, r10
- bl StartSpriteAnim
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08047A94: .4byte gUnknown_8260184
-_08047A98: .4byte gSprites
- thumb_func_end CreateEggShardSprite
-
- thumb_func_start EggHatchPrintMessage
-EggHatchPrintMessage: @ 8047A9C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x18
- adds r5, r0, 0
- mov r8, r1
- adds r6, r2, 0
- ldr r4, [sp, 0x2C]
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- movs r1, 0xFF
- str r3, [sp, 0x14]
- bl FillWindowPixelBuffer
- ldr r2, _08047B08 @ =gUnknown_3000E74
- ldr r1, [r2]
- movs r0, 0
- strb r0, [r1, 0xE]
- ldr r1, [r2]
- movs r0, 0x5
- strb r0, [r1, 0xF]
- ldr r1, [r2]
- movs r0, 0x6
- strb r0, [r1, 0x10]
- movs r0, 0x1
- str r0, [sp]
- str r0, [sp, 0x4]
- ldr r0, [r2]
- adds r0, 0xE
- str r0, [sp, 0x8]
- lsls r4, 24
- asrs r4, 24
- str r4, [sp, 0xC]
- mov r0, r8
- str r0, [sp, 0x10]
- adds r0, r5, 0
- movs r1, 0x3
- adds r2, r6, 0
- ldr r3, [sp, 0x14]
- bl AddTextPrinterParametrized2
- add sp, 0x18
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08047B08: .4byte gUnknown_3000E74
- thumb_func_end EggHatchPrintMessage
-
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s
index db6f44919..08aa16703 100644
--- a/asm/evolution_scene.s
+++ b/asm/evolution_scene.s
@@ -257,7 +257,7 @@ EvolutionScene: @ 80CDDF4
bl LoadCompressedPalette
adds r0, r5, 0
movs r1, 0x1
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _080CE0C0 @ =gMultiuseSpriteTemplate
mov r8, r0
ldr r1, _080CE0C4 @ =gDummySpriteAffineAnimTable
@@ -313,7 +313,7 @@ EvolutionScene: @ 80CDDF4
bl LoadCompressedPalette
mov r0, r10
movs r1, 0x3
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _080CE0C4 @ =gDummySpriteAffineAnimTable
mov r1, r8
str r0, [r1, 0x10]
@@ -542,7 +542,7 @@ CB2_EvolutionSceneLoadGraphics: @ 80CE0E8
bl LoadCompressedPalette
adds r0, r5, 0
movs r1, 0x3
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _080CE2C0 @ =gMultiuseSpriteTemplate
ldr r1, _080CE2C4 @ =gDummySpriteAffineAnimTable
str r1, [r0, 0x10]
@@ -793,7 +793,7 @@ _080CE458: .4byte gMonSpritesGfxPtr
_080CE45C:
adds r0, r6, 0
movs r1, 0x1
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _080CE4B4 @ =gMultiuseSpriteTemplate
ldr r1, _080CE4B8 @ =gDummySpriteAffineAnimTable
str r1, [r0, 0x10]
@@ -969,7 +969,7 @@ TradeEvolutionScene: @ 80CE540
bl LoadCompressedPalette
adds r0, r5, 0
movs r1, 0x1
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _080CE6CC @ =gMultiuseSpriteTemplate
ldr r1, _080CE6D0 @ =gDummySpriteAffineAnimTable
str r1, [r0, 0x10]
@@ -3567,7 +3567,7 @@ _080CFCAE:
movs r0, 0
movs r1, 0xA8
movs r2, 0xE0
- bl sub_814FE40
+ bl LoadUserWindowBorderGfx
ldr r0, _080CFCF4 @ =gUnknown_826D1CC
movs r1, 0xA8
str r1, [sp]
@@ -3577,7 +3577,7 @@ _080CFCAE:
movs r1, 0x3
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
ldr r3, _080CFCF8 @ =gUnknown_2023E82
strb r4, [r3, 0x1]
ldr r0, _080CFCF0 @ =gTasks
@@ -3597,7 +3597,7 @@ _080CFCF0: .4byte gTasks
_080CFCF4: .4byte gUnknown_826D1CC
_080CFCF8: .4byte gUnknown_2023E82
_080CFCFC:
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r4, r0, 24
cmp r4, 0
@@ -4388,7 +4388,7 @@ _080D03A0:
movs r0, 0x1
movs r2, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r1, _080D0428 @ =gUnknown_83F73A8
movs r0, 0x1
movs r2, 0
diff --git a/asm/field_effect.s b/asm/field_effect.s
index 3686eec3b..0fa36ce46 100644
--- a/asm/field_effect.s
+++ b/asm/field_effect.s
@@ -1968,16 +1968,16 @@ _080842C2:
thumb_func_start sub_80842C8
sub_80842C8: @ 80842C8
push {lr}
- ldr r0, _080842DC @ =c2_exit_to_overworld_2_switch
+ ldr r0, _080842DC @ =CB2_ReturnToField
bl SetMainCallback2
- ldr r1, _080842E0 @ =gUnknown_3005020
+ ldr r1, _080842E0 @ =gFieldCallback
ldr r0, _080842E4 @ =mapldr_080842E8
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
-_080842DC: .4byte c2_exit_to_overworld_2_switch
-_080842E0: .4byte gUnknown_3005020
+_080842DC: .4byte CB2_ReturnToField
+_080842E0: .4byte gFieldCallback
_080842E4: .4byte mapldr_080842E8
thumb_func_end sub_80842C8
@@ -1990,14 +1990,14 @@ mapldr_080842E8: @ 80842E8
bl CreateTask
bl ScriptContext2_Enable
bl player_bitmagic
- ldr r1, _0808430C @ =gUnknown_3005020
+ ldr r1, _0808430C @ =gFieldCallback
movs r0, 0
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
_08084308: .4byte task00_8084310
-_0808430C: .4byte gUnknown_3005020
+_0808430C: .4byte gFieldCallback
thumb_func_end mapldr_080842E8
thumb_func_start task00_8084310
@@ -2042,7 +2042,7 @@ _08084350:
bl warp_in
ldr r0, _08084384 @ =sub_805671C
bl SetMainCallback2
- ldr r1, _08084388 @ =gUnknown_3005020
+ ldr r1, _08084388 @ =gFieldCallback
ldr r0, _0808438C @ =mapldr_08084390
str r0, [r1]
adds r0, r5, 0
@@ -2055,7 +2055,7 @@ _08084376:
_0808437C: .4byte gTasks
_08084380: .4byte gFieldEffectArguments
_08084384: .4byte sub_805671C
-_08084388: .4byte gUnknown_3005020
+_08084388: .4byte gFieldCallback
_0808438C: .4byte mapldr_08084390
thumb_func_end task00_8084310
@@ -2093,7 +2093,7 @@ mapldr_08084390: @ 8084390
_080843D2:
bl ScriptContext2_Enable
bl player_bitmagic
- ldr r1, _080843F4 @ =gUnknown_3005020
+ ldr r1, _080843F4 @ =gFieldCallback
movs r0, 0
str r0, [r1]
pop {r4}
@@ -2103,7 +2103,7 @@ _080843D2:
_080843E8: .4byte c3_080843F8
_080843EC: .4byte gMapObjects
_080843F0: .4byte gPlayerAvatar
-_080843F4: .4byte gUnknown_3005020
+_080843F4: .4byte gFieldCallback
thumb_func_end mapldr_08084390
thumb_func_start c3_080843F8
@@ -2162,14 +2162,14 @@ sub_8084454: @ 8084454
ldr r0, _0808447C @ =sub_8084484
movs r1, 0
bl CreateTask
- ldr r1, _08084480 @ =gUnknown_3005020
+ ldr r1, _08084480 @ =gFieldCallback
movs r0, 0
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
_0808447C: .4byte sub_8084484
-_08084480: .4byte gUnknown_3005020
+_08084480: .4byte gFieldCallback
thumb_func_end sub_8084454
thumb_func_start sub_8084484
@@ -2861,7 +2861,7 @@ sub_80849A0: @ 80849A0
bne _080849DC
bl sub_809C460
bl warp_in
- ldr r1, _080849E4 @ =gUnknown_3005020
+ ldr r1, _080849E4 @ =gFieldCallback
ldr r0, _080849E8 @ =sub_80849F4
str r0, [r1]
ldr r0, _080849EC @ =sub_805671C
@@ -2876,7 +2876,7 @@ _080849DC:
bx r0
.align 2, 0
_080849E0: .4byte gPaletteFade
-_080849E4: .4byte gUnknown_3005020
+_080849E4: .4byte gFieldCallback
_080849E8: .4byte sub_80849F4
_080849EC: .4byte sub_805671C
_080849F0: .4byte sub_80847C0
@@ -2893,14 +2893,14 @@ sub_80849F4: @ 80849F4
ldr r0, _08084A1C @ =sub_8084A24
movs r1, 0
bl CreateTask
- ldr r1, _08084A20 @ =gUnknown_3005020
+ ldr r1, _08084A20 @ =gFieldCallback
movs r0, 0
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
_08084A1C: .4byte sub_8084A24
-_08084A20: .4byte gUnknown_3005020
+_08084A20: .4byte gFieldCallback
thumb_func_end sub_80849F4
thumb_func_start sub_8084A24
@@ -3884,7 +3884,7 @@ sub_8085168: @ 8085168
cmp r0, 0x1
bne _080851A0
bl warp_in
- ldr r1, _080851AC @ =gUnknown_3005020
+ ldr r1, _080851AC @ =gFieldCallback
ldr r0, _080851B0 @ =mapldr_080851BC
str r0, [r1]
ldr r0, _080851B4 @ =sub_805671C
@@ -3900,7 +3900,7 @@ _080851A0:
bx r1
.align 2, 0
_080851A8: .4byte gPaletteFade
-_080851AC: .4byte gUnknown_3005020
+_080851AC: .4byte gFieldCallback
_080851B0: .4byte mapldr_080851BC
_080851B4: .4byte sub_805671C
_080851B8: .4byte sub_8084F44
@@ -3913,7 +3913,7 @@ mapldr_080851BC: @ 80851BC
bl pal_fill_for_maplights
bl sub_8111CF0
bl ScriptContext2_Enable
- ldr r0, _080851E0 @ =gUnknown_3005020
+ ldr r0, _080851E0 @ =gFieldCallback
movs r1, 0
str r1, [r0]
ldr r0, _080851E4 @ =sub_80851E8
@@ -3921,7 +3921,7 @@ mapldr_080851BC: @ 80851BC
pop {r0}
bx r0
.align 2, 0
-_080851E0: .4byte gUnknown_3005020
+_080851E0: .4byte gFieldCallback
_080851E4: .4byte sub_80851E8
thumb_func_end mapldr_080851BC
@@ -4389,7 +4389,7 @@ sub_808554C: @ 808554C
cmp r0, 0x1
bne _08085584
bl warp_in
- ldr r1, _08085590 @ =gUnknown_3005020
+ ldr r1, _08085590 @ =gFieldCallback
ldr r0, _08085594 @ =sub_8084454
str r0, [r1]
ldr r0, _08085598 @ =sub_805671C
@@ -4405,7 +4405,7 @@ _08085584:
bx r1
.align 2, 0
_0808558C: .4byte gPaletteFade
-_08085590: .4byte gUnknown_3005020
+_08085590: .4byte gFieldCallback
_08085594: .4byte sub_8084454
_08085598: .4byte sub_805671C
_0808559C: .4byte sub_80853E4
@@ -4613,7 +4613,7 @@ _08085702:
bl FieldObjectSetDirection
bl sub_80555E0
bl warp_in
- ldr r1, _0808575C @ =gUnknown_3005020
+ ldr r1, _0808575C @ =gFieldCallback
ldr r0, _08085760 @ =sub_80859D4
str r0, [r1]
ldr r0, _08085764 @ =sub_805671C
@@ -4629,7 +4629,7 @@ _08085750:
bx r0
.align 2, 0
_08085758: .4byte gPaletteFade
-_0808575C: .4byte gUnknown_3005020
+_0808575C: .4byte gFieldCallback
_08085760: .4byte sub_80859D4
_08085764: .4byte sub_805671C
_08085768: .4byte sub_808563C
@@ -4970,7 +4970,7 @@ sub_80859D4: @ 80859D4
bl sub_8111CF0
bl ScriptContext2_Enable
bl player_bitmagic
- ldr r1, _08085A14 @ =gUnknown_3005020
+ ldr r1, _08085A14 @ =gFieldCallback
movs r0, 0
str r0, [r1]
ldr r2, _08085A18 @ =gMapObjects
@@ -4990,7 +4990,7 @@ sub_80859D4: @ 80859D4
pop {r0}
bx r0
.align 2, 0
-_08085A14: .4byte gUnknown_3005020
+_08085A14: .4byte gFieldCallback
_08085A18: .4byte gMapObjects
_08085A1C: .4byte gPlayerAvatar
_08085A20: .4byte sub_8085A24
@@ -5409,7 +5409,7 @@ sub_8085D34: @ 8085D34
bl warp_in
ldr r0, _08085D78 @ =sub_805671C
bl SetMainCallback2
- ldr r1, _08085D7C @ =gUnknown_3005020
+ ldr r1, _08085D7C @ =gFieldCallback
ldr r0, _08085D80 @ =mapldr_08085D88
str r0, [r1]
ldr r0, _08085D84 @ =sub_8085B78
@@ -5423,7 +5423,7 @@ _08085D70:
.align 2, 0
_08085D74: .4byte gPaletteFade
_08085D78: .4byte sub_805671C
-_08085D7C: .4byte gUnknown_3005020
+_08085D7C: .4byte gFieldCallback
_08085D80: .4byte mapldr_08085D88
_08085D84: .4byte sub_8085B78
thumb_func_end sub_8085D34
@@ -5436,7 +5436,7 @@ mapldr_08085D88: @ 8085D88
bl sub_8111CF0
bl ScriptContext2_Enable
bl player_bitmagic
- ldr r1, _08085DCC @ =gUnknown_3005020
+ ldr r1, _08085DCC @ =gFieldCallback
movs r0, 0
str r0, [r1]
ldr r2, _08085DD0 @ =gMapObjects
@@ -5457,7 +5457,7 @@ mapldr_08085D88: @ 8085D88
pop {r0}
bx r0
.align 2, 0
-_08085DCC: .4byte gUnknown_3005020
+_08085DCC: .4byte gFieldCallback
_08085DD0: .4byte gMapObjects
_08085DD4: .4byte gPlayerAvatar
_08085DD8: .4byte sub_8085DDC
diff --git a/asm/field_fadetransition.s b/asm/field_fadetransition.s
index 4039c4009..ceaaaf7a6 100644
--- a/asm/field_fadetransition.s
+++ b/asm/field_fadetransition.s
@@ -273,8 +273,8 @@ _0807DD1C:
bx r0
thumb_func_end task0A_asap_script_env_2_enable_and_set_ctx_running
- thumb_func_start sub_807DD24
-sub_807DD24: @ 807DD24
+ thumb_func_start FieldCallback_ReturnToEventScript2
+FieldCallback_ReturnToEventScript2: @ 807DD24
push {lr}
bl ScriptContext2_Enable
bl sub_8055DC4
@@ -286,7 +286,7 @@ sub_807DD24: @ 807DD24
bx r0
.align 2, 0
_0807DD40: .4byte task0A_asap_script_env_2_enable_and_set_ctx_running
- thumb_func_end sub_807DD24
+ thumb_func_end FieldCallback_ReturnToEventScript2
thumb_func_start sub_807DD44
sub_807DD44: @ 807DD44
@@ -1162,7 +1162,7 @@ DoWarp: @ 807E438
bl PlayRainStoppingSoundEffect
movs r0, 0x9
bl PlaySE
- ldr r0, _0807E464 @ =gUnknown_3005020
+ ldr r0, _0807E464 @ =gFieldCallback
ldr r1, _0807E468 @ =sub_807DF64
str r1, [r0]
ldr r0, _0807E46C @ =sub_807E718
@@ -1171,7 +1171,7 @@ DoWarp: @ 807E438
pop {r0}
bx r0
.align 2, 0
-_0807E464: .4byte gUnknown_3005020
+_0807E464: .4byte gFieldCallback
_0807E468: .4byte sub_807DF64
_0807E46C: .4byte sub_807E718
thumb_func_end DoWarp
@@ -1183,7 +1183,7 @@ DoDiveWarp: @ 807E470
bl sub_8055F88
bl sub_807DC18
bl PlayRainStoppingSoundEffect
- ldr r0, _0807E494 @ =gUnknown_3005020
+ ldr r0, _0807E494 @ =gFieldCallback
ldr r1, _0807E498 @ =sub_807DF64
str r1, [r0]
ldr r0, _0807E49C @ =sub_807E718
@@ -1192,7 +1192,7 @@ DoDiveWarp: @ 807E470
pop {r0}
bx r0
.align 2, 0
-_0807E494: .4byte gUnknown_3005020
+_0807E494: .4byte gFieldCallback
_0807E498: .4byte sub_807DF64
_0807E49C: .4byte sub_807E718
thumb_func_end DoDiveWarp
@@ -1232,7 +1232,7 @@ _0807E4D8: .4byte gTasks
DoDoorWarp: @ 807E4DC
push {lr}
bl ScriptContext2_Enable
- ldr r0, _0807E4F4 @ =gUnknown_3005020
+ ldr r0, _0807E4F4 @ =gFieldCallback
ldr r1, _0807E4F8 @ =sub_807DF64
str r1, [r0]
ldr r0, _0807E4FC @ =sub_807E80C
@@ -1241,7 +1241,7 @@ DoDoorWarp: @ 807E4DC
pop {r0}
bx r0
.align 2, 0
-_0807E4F4: .4byte gUnknown_3005020
+_0807E4F4: .4byte gFieldCallback
_0807E4F8: .4byte sub_807DF64
_0807E4FC: .4byte sub_807E80C
thumb_func_end DoDoorWarp
@@ -1253,14 +1253,14 @@ sub_807E500: @ 807E500
ldr r0, _0807E518 @ =sub_807E718
movs r1, 0xA
bl CreateTask
- ldr r1, _0807E51C @ =gUnknown_3005020
+ ldr r1, _0807E51C @ =gFieldCallback
ldr r0, _0807E520 @ =sub_807DF94
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
_0807E518: .4byte sub_807E718
-_0807E51C: .4byte gUnknown_3005020
+_0807E51C: .4byte gFieldCallback
_0807E520: .4byte sub_807DF94
thumb_func_end sub_807E500
@@ -1268,7 +1268,7 @@ _0807E520: .4byte sub_807DF94
sub_807E524: @ 807E524
push {lr}
bl ScriptContext2_Enable
- ldr r0, _0807E53C @ =gUnknown_3005020
+ ldr r0, _0807E53C @ =gFieldCallback
ldr r1, _0807E540 @ =sub_807DF64
str r1, [r0]
ldr r0, _0807E544 @ =sub_807E784
@@ -1277,7 +1277,7 @@ sub_807E524: @ 807E524
pop {r0}
bx r0
.align 2, 0
-_0807E53C: .4byte gUnknown_3005020
+_0807E53C: .4byte gFieldCallback
_0807E540: .4byte sub_807DF64
_0807E544: .4byte sub_807E784
thumb_func_end sub_807E524
@@ -1286,13 +1286,13 @@ _0807E544: .4byte sub_807E784
DoFallWarp: @ 807E548
push {lr}
bl DoDiveWarp
- ldr r1, _0807E558 @ =gUnknown_3005020
+ ldr r1, _0807E558 @ =gFieldCallback
ldr r0, _0807E55C @ =sub_8084454
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
-_0807E558: .4byte gUnknown_3005020
+_0807E558: .4byte gFieldCallback
_0807E55C: .4byte sub_8084454
thumb_func_end DoFallWarp
@@ -1339,14 +1339,14 @@ sub_807E59C: @ 807E59C
ldr r0, _0807E5B8 @ =sub_807E784
movs r1, 0xA
bl CreateTask
- ldr r1, _0807E5BC @ =gUnknown_3005020
+ ldr r1, _0807E5BC @ =gFieldCallback
ldr r0, _0807E5C0 @ =sub_807DF94
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
_0807E5B8: .4byte sub_807E784
-_0807E5BC: .4byte gUnknown_3005020
+_0807E5BC: .4byte gFieldCallback
_0807E5C0: .4byte sub_807DF94
thumb_func_end sub_807E59C
@@ -1358,14 +1358,14 @@ sub_807E5C4: @ 807E5C4
ldr r0, _0807E5E0 @ =sub_807E718
movs r1, 0xA
bl CreateTask
- ldr r1, _0807E5E4 @ =gUnknown_3005020
+ ldr r1, _0807E5E4 @ =gFieldCallback
ldr r0, _0807E5E8 @ =nullsub_60
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
_0807E5E0: .4byte sub_807E718
-_0807E5E4: .4byte gUnknown_3005020
+_0807E5E4: .4byte gFieldCallback
_0807E5E8: .4byte nullsub_60
thumb_func_end sub_807E5C4
@@ -1954,7 +1954,7 @@ _0807EA92:
strh r0, [r5]
b _0807EAB0
_0807EA9A:
- ldr r0, _0807EAB8 @ =gUnknown_3005020
+ ldr r0, _0807EAB8 @ =gFieldCallback
ldr r1, _0807EABC @ =sub_807DF64
str r1, [r0]
bl warp_in
@@ -1968,7 +1968,7 @@ _0807EAB0:
pop {r0}
bx r0
.align 2, 0
-_0807EAB8: .4byte gUnknown_3005020
+_0807EAB8: .4byte gFieldCallback
_0807EABC: .4byte sub_807DF64
_0807EAC0: .4byte sub_805671C
thumb_func_end sub_807E980
diff --git a/asm/hof_pc.s b/asm/hof_pc.s
index b5a437662..80f7fc3f9 100644
--- a/asm/hof_pc.s
+++ b/asm/hof_pc.s
@@ -57,16 +57,16 @@ _080CA59C: .4byte sub_80CA53C
thumb_func_start sub_80CA5A0
sub_80CA5A0: @ 80CA5A0
push {lr}
- ldr r0, _080CA5B4 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _080CA5B4 @ =CB2_ReturnToField
bl SetMainCallback2
- ldr r1, _080CA5B8 @ =gUnknown_3005020
+ ldr r1, _080CA5B8 @ =gFieldCallback
ldr r0, _080CA5BC @ =sub_80CA5C0
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
-_080CA5B4: .4byte c2_exit_to_overworld_2_switch
-_080CA5B8: .4byte gUnknown_3005020
+_080CA5B4: .4byte CB2_ReturnToField
+_080CA5B8: .4byte gFieldCallback
_080CA5BC: .4byte sub_80CA5C0
thumb_func_end sub_80CA5A0
diff --git a/asm/item_menu.s b/asm/item_menu.s
index 01c5f6e4c..46891fe94 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -5060,14 +5060,14 @@ _0810A678: .4byte sub_810A67C
thumb_func_start sub_810A67C
sub_810A67C: @ 810A67C
push {lr}
- ldr r2, _0810A68C @ =c2_exit_to_overworld_2_switch
+ ldr r2, _0810A68C @ =CB2_ReturnToField
movs r0, 0x2
movs r1, 0x3
bl sub_8107DB4
pop {r0}
bx r0
.align 2, 0
-_0810A68C: .4byte c2_exit_to_overworld_2_switch
+_0810A68C: .4byte CB2_ReturnToField
thumb_func_end sub_810A67C
thumb_func_start sub_810A690
diff --git a/asm/item_use.s b/asm/item_use.s
index b05f5be82..67da30cf6 100644
--- a/asm/item_use.s
+++ b/asm/item_use.s
@@ -83,7 +83,7 @@ sub_80A103C: @ 80A103C
ldrsh r0, [r0, r1]
cmp r0, 0x1
beq _080A1070
- ldr r1, _080A1068 @ =gUnknown_3005020
+ ldr r1, _080A1068 @ =gFieldCallback
ldr r0, _080A106C @ =sub_80A1084
str r0, [r1]
adds r0, r2, 0
@@ -91,7 +91,7 @@ sub_80A103C: @ 80A103C
b _080A107A
.align 2, 0
_080A1064: .4byte gTasks
-_080A1068: .4byte gUnknown_3005020
+_080A1068: .4byte gFieldCallback
_080A106C: .4byte sub_80A1084
_080A1070:
ldr r0, _080A1080 @ =gUnknown_2039998
@@ -1066,9 +1066,9 @@ sub_80A17E8: @ 80A17E8
ands r0, r1
cmp r0, 0
bne _080A1812
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
bl sub_80A1184
- ldr r1, _080A181C @ =c2_exit_to_overworld_2_switch
+ ldr r1, _080A181C @ =CB2_ReturnToField
movs r0, 0
movs r2, 0x1
bl InitTMCase
@@ -1080,7 +1080,7 @@ _080A1812:
bx r0
.align 2, 0
_080A1818: .4byte gPaletteFade
-_080A181C: .4byte c2_exit_to_overworld_2_switch
+_080A181C: .4byte CB2_ReturnToField
thumb_func_end sub_80A17E8
thumb_func_start sub_80A1820
@@ -1144,9 +1144,9 @@ sub_80A1880: @ 80A1880
ands r0, r1
cmp r0, 0
bne _080A18AA
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
bl sub_80A1184
- ldr r1, _080A18B4 @ =c2_exit_to_overworld_2_switch
+ ldr r1, _080A18B4 @ =CB2_ReturnToField
movs r0, 0
movs r2, 0x1
bl sub_813CD50
@@ -1158,7 +1158,7 @@ _080A18AA:
bx r0
.align 2, 0
_080A18B0: .4byte gPaletteFade
-_080A18B4: .4byte c2_exit_to_overworld_2_switch
+_080A18B4: .4byte CB2_ReturnToField
thumb_func_end sub_80A1880
thumb_func_start sub_80A18B8
@@ -1259,9 +1259,9 @@ sub_80A1960: @ 80A1960
ands r0, r1
cmp r0, 0
bne _080A1988
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
bl sub_80A1184
- ldr r1, _080A1994 @ =c2_exit_to_overworld_2_switch
+ ldr r1, _080A1994 @ =CB2_ReturnToField
movs r0, 0
bl sub_815ABC4
adds r0, r4, 0
@@ -1272,7 +1272,7 @@ _080A1988:
bx r0
.align 2, 0
_080A1990: .4byte gPaletteFade
-_080A1994: .4byte c2_exit_to_overworld_2_switch
+_080A1994: .4byte CB2_ReturnToField
thumb_func_end sub_80A1960
thumb_func_start sub_80A1998
@@ -1666,9 +1666,9 @@ sub_80A1CC0: @ 80A1CC0
ands r0, r1
cmp r0, 0
bne _080A1CE8
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
bl sub_80A1184
- ldr r1, _080A1CF4 @ =c2_exit_to_overworld_2_switch
+ ldr r1, _080A1CF4 @ =CB2_ReturnToField
movs r0, 0
bl sub_80BFF50
adds r0, r4, 0
@@ -1679,7 +1679,7 @@ _080A1CE8:
bx r0
.align 2, 0
_080A1CF0: .4byte gPaletteFade
-_080A1CF4: .4byte c2_exit_to_overworld_2_switch
+_080A1CF4: .4byte CB2_ReturnToField
thumb_func_end sub_80A1CC0
thumb_func_start sub_80A1CF8
@@ -1749,9 +1749,9 @@ sub_80A1D68: @ 80A1D68
ands r0, r1
cmp r0, 0
bne _080A1D8E
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
bl sub_80A1184
- ldr r0, _080A1D98 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _080A1D98 @ =CB2_ReturnToField
bl UseFameChecker
adds r0, r4, 0
bl DestroyTask
@@ -1761,7 +1761,7 @@ _080A1D8E:
bx r0
.align 2, 0
_080A1D94: .4byte gPaletteFade
-_080A1D98: .4byte c2_exit_to_overworld_2_switch
+_080A1D98: .4byte CB2_ReturnToField
thumb_func_end sub_80A1D68
thumb_func_start sub_80A1D9C
diff --git a/asm/learn_move.s b/asm/learn_move.s
index 3db64a899..92f6abfea 100644
--- a/asm/learn_move.s
+++ b/asm/learn_move.s
@@ -50,8 +50,8 @@ sub_80E4660: @ 80E4660
bne _080E4684
ldr r0, _080E4690 @ =sub_80E478C
bl SetMainCallback2
- ldr r1, _080E4694 @ =gUnknown_3005020
- ldr r0, _080E4698 @ =sub_807DD24
+ ldr r1, _080E4694 @ =gFieldCallback
+ ldr r0, _080E4698 @ =FieldCallback_ReturnToEventScript2
str r0, [r1]
adds r0, r4, 0
bl DestroyTask
@@ -62,8 +62,8 @@ _080E4684:
.align 2, 0
_080E468C: .4byte gPaletteFade
_080E4690: .4byte sub_80E478C
-_080E4694: .4byte gUnknown_3005020
-_080E4698: .4byte sub_807DD24
+_080E4694: .4byte gFieldCallback
+_080E4698: .4byte FieldCallback_ReturnToEventScript2
thumb_func_end sub_80E4660
thumb_func_start sub_80E469C
@@ -133,7 +133,7 @@ _080E46C6:
movs r0, 0x1
movs r2, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r1, _080E4788 @ =gUnknown_8E97EC4
movs r0, 0x1
movs r2, 0
@@ -454,7 +454,7 @@ _080E4A3E:
movs r1, 0x3
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
ldr r0, _080E4A64 @ =gUnknown_203AAB4
ldr r1, [r0]
ldrb r0, [r1]
@@ -540,7 +540,7 @@ _080E4AF4:
movs r1, 0x3
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
ldr r0, _080E4B1C @ =gUnknown_203AAB4
ldr r1, [r0]
ldrb r0, [r1]
@@ -601,7 +601,7 @@ _080E4B70:
movs r1, 0x3
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
ldr r0, _080E4B94 @ =gUnknown_203AAB4
ldr r1, [r0]
movs r0, 0x12
@@ -665,7 +665,7 @@ _080E4BF4:
movs r1, 0x3
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
ldr r0, _080E4C18 @ =gUnknown_203AAB4
ldr r1, [r0]
movs r0, 0x1A
@@ -810,13 +810,13 @@ _080E4D26:
ldr r0, _080E4D40 @ =gUnknown_203AAB4
ldr r0, [r0]
bl Free
- ldr r0, _080E4D44 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _080E4D44 @ =CB2_ReturnToField
bl SetMainCallback2
b _080E4EDA
.align 2, 0
_080E4D3C: .4byte gPaletteFade
_080E4D40: .4byte gUnknown_203AAB4
-_080E4D44: .4byte c2_exit_to_overworld_2_switch
+_080E4D44: .4byte CB2_ReturnToField
_080E4D48:
movs r0, 0x1
negs r0, r0
@@ -1814,7 +1814,7 @@ _080E5570: .4byte 0x00000a67
thumb_func_start sub_80E5574
sub_80E5574: @ 80E5574
push {r4,lr}
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r4, r0, 24
movs r0, 0x2
diff --git a/asm/link.s b/asm/link.s
index 4dd79efe1..d2fabbd0c 100644
--- a/asm/link.s
+++ b/asm/link.s
@@ -3360,7 +3360,7 @@ sub_800AE1C: @ 800AE1C
movs r0, 0x1
movs r2, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r1, _0800AEBC @ =gWirelessLinkDisplayBin
movs r0, 0x1
movs r2, 0
diff --git a/asm/link_rfu.s b/asm/link_rfu.s
index 3638e9e0a..0e1a79b65 100644
--- a/asm/link_rfu.s
+++ b/asm/link_rfu.s
@@ -4359,7 +4359,7 @@ _080FF4A2:
thumb_func_start sub_80FF4A8
sub_80FF4A8: @ 80FF4A8
push {lr}
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -4400,7 +4400,7 @@ _080FF4EA:
thumb_func_start sub_80FF4F0
sub_80FF4F0: @ 80FF4F0
push {r4,lr}
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -4446,7 +4446,7 @@ _080FF53E:
thumb_func_start sub_80FF544
sub_80FF544: @ 80FF544
push {lr}
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -6079,7 +6079,7 @@ _08100038:
movs r0, 0x3
movs r2, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r1, _08100068 @ =gUnknown_8E99E74
movs r0, 0x3
movs r2, 0
@@ -6106,7 +6106,7 @@ _0810006C:
movs r0, 0x1
movs r2, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
movs r0, 0x1
bl CopyBgTilemapBufferToVram
b _08100104
@@ -7964,7 +7964,7 @@ sub_8100F18: @ 8100F18
movs r1, 0x1
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
add sp, 0xC
pop {r0}
bx r0
diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s
index 7e3718d18..388c871d9 100644
--- a/asm/link_rfu_3.s
+++ b/asm/link_rfu_3.s
@@ -3088,7 +3088,7 @@ _08117210:
movs r0, 0x6
strb r0, [r1, 0x1]
ldr r1, _08117274 @ =gMain
- ldr r0, _08117278 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _08117278 @ =CB2_ReturnToField
str r0, [r1, 0x8]
ldr r0, _0811727C @ =sub_8050138
bl SetMainCallback2
@@ -3107,7 +3107,7 @@ _08117268: .4byte gUnknown_2031CCC
_0811726C: .4byte gBlockRecvBuffer
_08117270: .4byte gUnknown_2031DA4
_08117274: .4byte gMain
-_08117278: .4byte c2_exit_to_overworld_2_switch
+_08117278: .4byte CB2_ReturnToField
_0811727C: .4byte sub_8050138
thumb_func_end sub_8117130
@@ -3251,7 +3251,7 @@ _08117384:
eors r0, r1
lsls r0, 24
lsrs r0, 24
- ldr r1, _081173BC @ =c2_exit_to_overworld_2_switch
+ ldr r1, _081173BC @ =CB2_ReturnToField
bl sub_808B700
_081173A2:
bl RunTasks
@@ -3263,7 +3263,7 @@ _081173A2:
bx r0
.align 2, 0
_081173B8: .4byte sub_8117280
-_081173BC: .4byte c2_exit_to_overworld_2_switch
+_081173BC: .4byte CB2_ReturnToField
thumb_func_end sub_8117354
thumb_func_start sub_81173C0
@@ -3645,7 +3645,7 @@ _08117640:
.4byte _081178E0
.4byte _08117784
_08117784:
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r1, _08117798 @ =gMain
ldr r0, _0811779C @ =sub_811C1C8
str r0, [r1, 0x8]
@@ -3656,7 +3656,7 @@ _08117784:
_08117798: .4byte gMain
_0811779C: .4byte sub_811C1C8
_081177A0:
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r0, _081177C4 @ =gBlockSendBuffer
movs r1, 0x1
bl sub_8117594
@@ -3672,7 +3672,7 @@ _081177A0:
.align 2, 0
_081177C4: .4byte gBlockSendBuffer
_081177C8:
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
bl sp000_heal_pokemon
bl SavePlayerParty
bl LoadPlayerBag
@@ -3688,7 +3688,7 @@ _081177C8:
.align 2, 0
_081177EC: .4byte gBlockSendBuffer
_081177F0:
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
bl sp000_heal_pokemon
bl SavePlayerParty
bl LoadPlayerBag
@@ -3706,7 +3706,7 @@ _08117818:
ldr r0, _0811783C @ =gBlockSendBuffer
movs r1, 0x1
bl sub_8117594
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
movs r0, 0x3
str r0, [sp]
movs r0, 0
@@ -7001,19 +7001,19 @@ _08119512:
ldr r1, _0811952C @ =gUnknown_203B06C
movs r0, 0x1
strh r0, [r1]
- ldr r1, _08119530 @ =gUnknown_3005020
+ ldr r1, _08119530 @ =gFieldCallback
ldr r0, _08119534 @ =sub_807DCE4
str r0, [r1]
- ldr r1, _08119538 @ =c2_exit_to_overworld_2_switch
+ ldr r1, _08119538 @ =CB2_ReturnToField
movs r0, 0x8
bl sub_81277F4
b _081198DC
.align 2, 0
_08119528: .4byte gPaletteFade
_0811952C: .4byte gUnknown_203B06C
-_08119530: .4byte gUnknown_3005020
+_08119530: .4byte gFieldCallback
_08119534: .4byte sub_807DCE4
-_08119538: .4byte c2_exit_to_overworld_2_switch
+_08119538: .4byte CB2_ReturnToField
_0811953C:
adds r0, r6, 0
adds r0, 0x16
@@ -7354,10 +7354,10 @@ _081197CA:
lsls r0, 22
lsrs r0, 22
strh r0, [r2]
- ldr r1, _08119834 @ =gUnknown_3005020
+ ldr r1, _08119834 @ =gFieldCallback
ldr r0, _08119838 @ =sub_807DCE4
str r0, [r1]
- ldr r1, _0811983C @ =c2_exit_to_overworld_2_switch
+ ldr r1, _0811983C @ =CB2_ReturnToField
movs r0, 0x9
bl sub_81277F4
adds r0, r6, 0
@@ -7371,9 +7371,9 @@ _08119824: .4byte gUnknown_203B06C
_08119828: .4byte gUnknown_203B064
_0811982C: .4byte gUnknown_203B06A
_08119830: .4byte gUnknown_203B068
-_08119834: .4byte gUnknown_3005020
+_08119834: .4byte gFieldCallback
_08119838: .4byte sub_807DCE4
-_0811983C: .4byte c2_exit_to_overworld_2_switch
+_0811983C: .4byte CB2_ReturnToField
_08119840:
ldr r1, _08119890 @ =gUnknown_203B058
movs r0, 0x44
@@ -8593,7 +8593,7 @@ _0811A174:
negs r0, r0
b _0811A1A4
_0811A186:
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
movs r2, 0x80
@@ -13151,13 +13151,13 @@ _0811C4C0:
bl sub_811C150
cmp r0, 0
beq _0811C516
- ldr r0, _0811C4E0 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _0811C4E0 @ =CB2_ReturnToField
bl SetMainCallback2
b _0811C516
.align 2, 0
_0811C4D8: .4byte gUnknown_203B08C
_0811C4DC: .4byte gUnknown_841E58D
-_0811C4E0: .4byte c2_exit_to_overworld_2_switch
+_0811C4E0: .4byte CB2_ReturnToField
_0811C4E4:
ldr r0, _0811C4FC @ =gReceivedRemoteLinkPlayers
ldrb r0, [r0]
@@ -13181,7 +13181,7 @@ _0811C500:
bl sub_811C150
cmp r0, 0
beq _0811C516
- ldr r0, _0811C53C @ =c2_exit_to_overworld_2_switch
+ ldr r0, _0811C53C @ =CB2_ReturnToField
bl SetMainCallback2
_0811C516:
bl RunTasks
@@ -13197,7 +13197,7 @@ _0811C52A:
.align 2, 0
_0811C534: .4byte gUnknown_203B08C
_0811C538: .4byte gUnknown_841E572
-_0811C53C: .4byte c2_exit_to_overworld_2_switch
+_0811C53C: .4byte CB2_ReturnToField
thumb_func_end sub_811C1C8
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/menu.s b/asm/menu.s
index a6d3d183b..6341c2c32 100644
--- a/asm/menu.s
+++ b/asm/menu.s
@@ -2272,8 +2272,8 @@ sub_810FF04: @ 810FF04
bx r1
thumb_func_end sub_810FF04
- thumb_func_start sub_810FF60
-sub_810FF60: @ 810FF60
+ thumb_func_start CreateYesNoMenu
+CreateYesNoMenu: @ 810FF60
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -2422,7 +2422,7 @@ sub_810FF60: @ 810FF60
.align 2, 0
_0811009C: .4byte gUnknown_203ADF3
_081100A0: .4byte gUnknown_841623D
- thumb_func_end sub_810FF60
+ thumb_func_end CreateYesNoMenu
thumb_func_start sub_81100A4
sub_81100A4: @ 81100A4
@@ -2439,14 +2439,14 @@ sub_81100A4: @ 81100A4
movs r2, 0
str r2, [sp, 0x8]
movs r3, 0
- bl sub_810FF60
+ bl CreateYesNoMenu
add sp, 0xC
pop {r0}
bx r0
thumb_func_end sub_81100A4
- thumb_func_start ProcessMenuInputNoWrap_
-ProcessMenuInputNoWrap_: @ 81100C8
+ thumb_func_start Menu_ProcessInputNoWrapClearOnChoose
+Menu_ProcessInputNoWrapClearOnChoose: @ 81100C8
push {r4,lr}
bl ProcessMenuInputNoWrapAround
lsls r0, 24
@@ -2461,7 +2461,7 @@ _081100DE:
pop {r4}
pop {r1}
bx r1
- thumb_func_end ProcessMenuInputNoWrap_
+ thumb_func_end Menu_ProcessInputNoWrapClearOnChoose
thumb_func_start sub_81100E8
sub_81100E8: @ 81100E8
diff --git a/asm/menu_helpers.s b/asm/menu_helpers.s
index e576313f4..792bed5cf 100644
--- a/asm/menu_helpers.s
+++ b/asm/menu_helpers.s
@@ -129,7 +129,7 @@ sub_80BF560: @ 80BF560
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -210,7 +210,7 @@ CreateYesNoMenuWithCallbacks: @ 80BF5D0
str r5, [sp, 0x4]
movs r4, 0
str r4, [sp, 0x8]
- bl sub_810FF60
+ bl CreateYesNoMenu
ldr r0, _080BF624 @ =gUnknown_20399C8
str r7, [r0]
ldr r1, _080BF628 @ =gTasks
diff --git a/asm/new_menu_helpers.s b/asm/new_menu_helpers.s
index 2e4e1a2c9..7401398af 100644
--- a/asm/new_menu_helpers.s
+++ b/asm/new_menu_helpers.s
@@ -272,8 +272,8 @@ _080F695E:
bx r1
thumb_func_end sub_80F68F0
- thumb_func_start sub_80F696C
-sub_80F696C: @ 80F696C
+ thumb_func_start DecompressAndLoadBgGfxUsingHeap
+DecompressAndLoadBgGfxUsingHeap: @ 80F696C
push {r4-r7,lr}
mov r7, r9
mov r6, r8
@@ -333,7 +333,7 @@ _080F69D2:
.align 2, 0
_080F69E0: .4byte task_free_buf_after_copying_tile_data_to_vram
_080F69E4: .4byte gTasks
- thumb_func_end sub_80F696C
+ thumb_func_end DecompressAndLoadBgGfxUsingHeap
thumb_func_start sub_80F69E8
sub_80F69E8: @ 80F69E8
@@ -2156,7 +2156,7 @@ sub_80F7858: @ 80F7858
movs r1, 0x2
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
add sp, 0xC
pop {r0}
bx r0
@@ -2179,7 +2179,7 @@ sub_80F7880: @ 80F7880
movs r1, 0x2
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
add sp, 0xC
pop {r0}
bx r0
diff --git a/asm/option_menu.s b/asm/option_menu.s
index cff6f1f25..84cb85e6b 100644
--- a/asm/option_menu.s
+++ b/asm/option_menu.s
@@ -967,7 +967,7 @@ sub_8088B00: @ 8088B00
lsls r0, 24
lsrs r0, 24
mov r8, r0
- ldr r1, _08088BBC @ =gUnknown_3005020
+ ldr r1, _08088BBC @ =gFieldCallback
ldr r0, _08088BC0 @ =sub_807DF64
str r0, [r1]
ldr r0, _08088BC4 @ =gMain
@@ -1050,7 +1050,7 @@ sub_8088B00: @ 8088B00
pop {r0}
bx r0
.align 2, 0
-_08088BBC: .4byte gUnknown_3005020
+_08088BBC: .4byte gFieldCallback
_08088BC0: .4byte sub_807DF64
_08088BC4: .4byte gMain
_08088BC8: .4byte gSaveBlock2Ptr
diff --git a/asm/overworld.s b/asm/overworld.s
index e7121d398..4210aaa9d 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -3022,8 +3022,8 @@ sav1_saved_warp2_map_get_name: @ 8056238
_0805625C: .4byte gSaveBlock1Ptr
thumb_func_end sav1_saved_warp2_map_get_name
- thumb_func_start sav1_map_get_name
-sav1_map_get_name: @ 8056260
+ thumb_func_start GetCurrentRegionMapSectionId
+GetCurrentRegionMapSectionId: @ 8056260
push {lr}
ldr r0, _08056284 @ =gSaveBlock1Ptr
ldr r1, [r0]
@@ -3042,7 +3042,7 @@ sav1_map_get_name: @ 8056260
bx r1
.align 2, 0
_08056284: .4byte gSaveBlock1Ptr
- thumb_func_end sav1_map_get_name
+ thumb_func_end GetCurrentRegionMapSectionId
thumb_func_start sav1_map_get_battletype
sav1_map_get_battletype: @ 8056288
@@ -3196,8 +3196,8 @@ _080563E8: .4byte gUnknown_3005014
_080563EC: .4byte gUnknown_300501C
thumb_func_end sub_8056354
- thumb_func_start sub_80563F0
-sub_80563F0: @ 80563F0
+ thumb_func_start CleanupOverworldWindowsAndTilemaps
+CleanupOverworldWindowsAndTilemaps: @ 80563F0
push {lr}
bl sub_80F6C8C
ldr r0, _08056414 @ =gUnknown_300501C
@@ -3215,7 +3215,7 @@ sub_80563F0: @ 80563F0
_08056414: .4byte gUnknown_300501C
_08056418: .4byte gUnknown_3005014
_0805641C: .4byte gUnknown_3005018
- thumb_func_end sub_80563F0
+ thumb_func_end CleanupOverworldWindowsAndTilemaps
thumb_func_start sub_8056420
sub_8056420: @ 8056420
@@ -3457,24 +3457,24 @@ _08056604: .4byte gFieldCallback2
_08056608:
movs r1, 0
str r1, [r4]
- ldr r0, _08056614 @ =gUnknown_3005020
+ ldr r0, _08056614 @ =gFieldCallback
str r1, [r0]
b _08056636
.align 2, 0
-_08056614: .4byte gUnknown_3005020
+_08056614: .4byte gFieldCallback
_08056618:
- ldr r0, _08056628 @ =gUnknown_3005020
+ ldr r0, _08056628 @ =gFieldCallback
ldr r0, [r0]
cmp r0, 0
beq _0805662C
bl _call_via_r0
b _08056630
.align 2, 0
-_08056628: .4byte gUnknown_3005020
+_08056628: .4byte gFieldCallback
_0805662C:
bl sub_807DF64
_08056630:
- ldr r1, _08056640 @ =gUnknown_3005020
+ ldr r1, _08056640 @ =gFieldCallback
movs r0, 0
str r0, [r1]
_08056636:
@@ -3484,7 +3484,7 @@ _08056638:
pop {r1}
bx r1
.align 2, 0
-_08056640: .4byte gUnknown_3005020
+_08056640: .4byte gFieldCallback
thumb_func_end map_post_load_hook_exec
thumb_func_start CB2_NewGame
@@ -3498,7 +3498,7 @@ CB2_NewGame: @ 8056644
bl PlayTimeCounter_Start
bl ScriptContext1_Init
bl ScriptContext2_Disable
- ldr r1, _0805668C @ =gUnknown_3005020
+ ldr r1, _0805668C @ =gFieldCallback
ldr r0, _08056690 @ =sub_807DF7C
str r0, [r1]
ldr r1, _08056694 @ =gFieldCallback2
@@ -3514,7 +3514,7 @@ CB2_NewGame: @ 8056644
pop {r0}
bx r0
.align 2, 0
-_0805668C: .4byte gUnknown_3005020
+_0805668C: .4byte gFieldCallback
_08056690: .4byte sub_807DF7C
_08056694: .4byte gFieldCallback2
_08056698: .4byte gMain + 0x438
@@ -3545,7 +3545,7 @@ c2_whiteout: @ 80566A4
bl sub_80559F8
bl ScriptContext1_Init
bl ScriptContext2_Disable
- ldr r1, _0805670C @ =gUnknown_3005020
+ ldr r1, _0805670C @ =gFieldCallback
ldr r0, _08056710 @ =sub_807F5F0
str r0, [r1]
mov r1, sp
@@ -3565,7 +3565,7 @@ _08056702:
bx r0
.align 2, 0
_08056708: .4byte gMain
-_0805670C: .4byte gUnknown_3005020
+_0805670C: .4byte gFieldCallback
_08056710: .4byte sub_807F5F0
_08056714: .4byte sub_8056534
_08056718: .4byte sub_80565B4
@@ -3624,7 +3624,7 @@ _08056784: .4byte sub_80565B4
sub_8056788: @ 8056788
push {lr}
bl sub_80569BC
- ldr r0, _080567A0 @ =gUnknown_3005020
+ ldr r0, _080567A0 @ =gFieldCallback
ldr r1, _080567A4 @ =sub_807DE58
str r1, [r0]
ldr r0, _080567A8 @ =c2_80567AC
@@ -3632,7 +3632,7 @@ sub_8056788: @ 8056788
pop {r0}
bx r0
.align 2, 0
-_080567A0: .4byte gUnknown_3005020
+_080567A0: .4byte gFieldCallback
_080567A4: .4byte sub_807DE58
_080567A8: .4byte c2_80567AC
thumb_func_end sub_8056788
@@ -3659,8 +3659,8 @@ _080567D4: .4byte c1_link_related
_080567D8: .4byte sub_80565B4
thumb_func_end c2_80567AC
- thumb_func_start c2_exit_to_overworld_2_switch
-c2_exit_to_overworld_2_switch: @ 80567DC
+ thumb_func_start CB2_ReturnToField
+CB2_ReturnToField: @ 80567DC
push {lr}
bl is_c1_link_related_active
cmp r0, 0x1
@@ -3679,7 +3679,7 @@ _080567FE:
bx r0
.align 2, 0
_08056804: .4byte c2_exit_to_overworld_2_local
- thumb_func_end c2_exit_to_overworld_2_switch
+ thumb_func_end CB2_ReturnToField
thumb_func_start c2_exit_to_overworld_2_local
c2_exit_to_overworld_2_local: @ 8056808
@@ -3731,26 +3731,26 @@ c2_8056854: @ 8056854
ldrb r0, [r0]
cmp r0, 0
beq _08056888
- ldr r1, _08056880 @ =gUnknown_3005020
+ ldr r1, _08056880 @ =gFieldCallback
ldr r0, _08056884 @ =sub_807DE58
b _0805688C
.align 2, 0
_08056878: .4byte c1_link_related
_0805687C: .4byte gWirelessCommType
-_08056880: .4byte gUnknown_3005020
+_08056880: .4byte gFieldCallback
_08056884: .4byte sub_807DE58
_08056888:
- ldr r1, _080568A0 @ =gUnknown_3005020
+ ldr r1, _080568A0 @ =gFieldCallback
ldr r0, _080568A4 @ =sub_807DDD0
_0805688C:
str r0, [r1]
bl ScriptContext1_Init
bl ScriptContext2_Disable
- bl c2_exit_to_overworld_2_switch
+ bl CB2_ReturnToField
pop {r0}
bx r0
.align 2, 0
-_080568A0: .4byte gUnknown_3005020
+_080568A0: .4byte gFieldCallback
_080568A4: .4byte sub_807DDD0
thumb_func_end c2_8056854
@@ -3761,7 +3761,7 @@ sub_80568A8: @ 80568A8
ldr r1, _080568BC @ =gFieldCallback2
ldr r0, _080568C0 @ =sub_807E3BC
str r0, [r1]
- bl c2_exit_to_overworld_2_switch
+ bl CB2_ReturnToField
pop {r0}
bx r0
.align 2, 0
@@ -3773,14 +3773,14 @@ _080568C0: .4byte sub_807E3BC
sub_80568C4: @ 80568C4
push {lr}
bl sub_80569BC
- ldr r1, _080568D8 @ =gUnknown_3005020
+ ldr r1, _080568D8 @ =gFieldCallback
ldr r0, _080568DC @ =sub_807DD44
str r0, [r1]
- bl c2_exit_to_overworld_2_switch
+ bl CB2_ReturnToField
pop {r0}
bx r0
.align 2, 0
-_080568D8: .4byte gUnknown_3005020
+_080568D8: .4byte gFieldCallback
_080568DC: .4byte sub_807DD44
thumb_func_end sub_80568C4
@@ -3788,29 +3788,29 @@ _080568DC: .4byte sub_807DD44
c2_exit_to_overworld_1_continue_scripts_restart_music: @ 80568E0
push {lr}
bl sub_80569BC
- ldr r1, _080568F4 @ =gUnknown_3005020
- ldr r0, _080568F8 @ =sub_807DD24
+ ldr r1, _080568F4 @ =gFieldCallback
+ ldr r0, _080568F8 @ =FieldCallback_ReturnToEventScript2
str r0, [r1]
- bl c2_exit_to_overworld_2_switch
+ bl CB2_ReturnToField
pop {r0}
bx r0
.align 2, 0
-_080568F4: .4byte gUnknown_3005020
-_080568F8: .4byte sub_807DD24
+_080568F4: .4byte gFieldCallback
+_080568F8: .4byte FieldCallback_ReturnToEventScript2
thumb_func_end c2_exit_to_overworld_1_continue_scripts_restart_music
thumb_func_start sub_80568FC
sub_80568FC: @ 80568FC
push {lr}
bl sub_80569BC
- ldr r1, _08056910 @ =gUnknown_3005020
+ ldr r1, _08056910 @ =gFieldCallback
ldr r0, _08056914 @ =sub_807DF7C
str r0, [r1]
- bl c2_exit_to_overworld_2_switch
+ bl CB2_ReturnToField
pop {r0}
bx r0
.align 2, 0
-_08056910: .4byte gUnknown_3005020
+_08056910: .4byte gFieldCallback
_08056914: .4byte sub_807DF7C
thumb_func_end sub_80568FC
@@ -3867,17 +3867,17 @@ _08056990: .4byte gFieldCallback2
_08056994: .4byte gUnknown_2031DE0
_08056998: .4byte sub_805671C
_0805699C:
- ldr r0, _080569B0 @ =gUnknown_3005020
+ ldr r0, _080569B0 @ =gFieldCallback
ldr r1, _080569B4 @ =sub_8056918
str r1, [r0]
ldr r0, _080569B8 @ =sub_8056534
bl sub_80565E0
- bl c2_exit_to_overworld_2_switch
+ bl CB2_ReturnToField
_080569AC:
pop {r0}
bx r0
.align 2, 0
-_080569B0: .4byte gUnknown_3005020
+_080569B0: .4byte gFieldCallback
_080569B4: .4byte sub_8056918
_080569B8: .4byte sub_8056534
thumb_func_end sub_8056938
@@ -5150,7 +5150,7 @@ _0805748C: .4byte sub_805671C
_08057490:
ldr r0, _080574A0 @ =sub_8056534
bl sub_80565E0
- bl c2_exit_to_overworld_2_switch
+ bl CB2_ReturnToField
_0805749A:
pop {r0}
bx r0
@@ -5619,7 +5619,7 @@ sub_8057854: @ 8057854
ands r0, r1
cmp r0, 0
bne _08057876
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r0, _08057880 @ =sub_805671C
bl SetMainCallback2
adds r0, r4, 0
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 385279a57..2aaa52985 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -2585,7 +2585,7 @@ sub_811FEA4: @ 811FEA4
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -4198,7 +4198,7 @@ sub_8120AC4: @ 8120AC4
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -6926,7 +6926,7 @@ sub_812200C: @ 812200C
movs r1, 0x2
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
add sp, 0xC
pop {r0}
bx r0
@@ -10113,7 +10113,7 @@ sub_8123930: @ 8123930
push {r4-r6,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -10752,7 +10752,7 @@ sub_8123E8C: @ 8123E8C
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -10871,7 +10871,7 @@ sub_8123F80: @ 8123F80
push {r7}
lsls r0, 24
lsrs r5, r0, 24
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -11790,7 +11790,7 @@ _08124754: .4byte gUnknown_203B0A0
_08124758: .4byte sub_80C4EF8
_0812475C:
ldr r1, _08124780 @ =gUnknown_203B0A0
- ldr r0, _08124784 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _08124784 @ =CB2_ReturnToField
str r0, [r1]
bl GetCursorSelectionMonId
lsls r0, 24
@@ -11807,7 +11807,7 @@ _08124778:
b _081247B4
.align 2, 0
_08124780: .4byte gUnknown_203B0A0
-_08124784: .4byte c2_exit_to_overworld_2_switch
+_08124784: .4byte CB2_ReturnToField
_08124788: .4byte gPlayerParty
_0812478C:
cmp r4, 0
@@ -11897,7 +11897,7 @@ sub_8124828: @ 8124828
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -11915,7 +11915,7 @@ _08124848:
b _081248A2
_0812484E:
ldr r1, _0812487C @ =gUnknown_203B0A0
- ldr r0, _08124880 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _08124880 @ =CB2_ReturnToField
str r0, [r1]
bl GetCursorSelectionMonId
lsls r0, 24
@@ -11936,7 +11936,7 @@ _0812484E:
b _081248A2
.align 2, 0
_0812487C: .4byte gUnknown_203B0A0
-_08124880: .4byte c2_exit_to_overworld_2_switch
+_08124880: .4byte CB2_ReturnToField
_08124884: .4byte gPlayerParty
_08124888: .4byte gUnknown_203B09C
_0812488C:
@@ -14561,7 +14561,7 @@ sub_8125DBC: @ 8125DBC
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -15016,7 +15016,7 @@ sub_8126170: @ 8126170
muls r1, r0
ldr r0, _081261A4 @ =gPlayerParty
adds r4, r1, r0
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r5, r0, 24
cmp r5, 0
@@ -17093,7 +17093,7 @@ sub_8127268: @ 8127268
push {r4-r7,lr}
lsls r0, 24
lsrs r5, r0, 24
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -19308,7 +19308,7 @@ sub_8128370: @ 8128370
str r0, [sp]
ldr r0, _081283A0 @ =sub_811FB28
str r0, [sp, 0x4]
- ldr r0, _081283A4 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _081283A4 @ =CB2_ReturnToField
str r0, [sp, 0x8]
movs r0, 0x6
movs r1, 0
@@ -19322,7 +19322,7 @@ sub_8128370: @ 8128370
_08128398: .4byte gFieldCallback2
_0812839C: .4byte hm_add_c3_without_phase_2
_081283A0: .4byte sub_811FB28
-_081283A4: .4byte c2_exit_to_overworld_2_switch
+_081283A4: .4byte CB2_ReturnToField
thumb_func_end sub_8128370
thumb_func_start sub_81283A8
@@ -19338,7 +19338,7 @@ sub_81283A8: @ 81283A8
str r1, [sp]
ldr r1, _081283DC @ =sub_811FB28
str r1, [sp, 0x4]
- ldr r1, _081283E0 @ =c2_exit_to_overworld_2_switch
+ ldr r1, _081283E0 @ =CB2_ReturnToField
str r1, [sp, 0x8]
movs r1, 0
movs r2, 0xB
@@ -19351,7 +19351,7 @@ sub_81283A8: @ 81283A8
_081283D4: .4byte gFieldCallback2
_081283D8: .4byte hm_add_c3_without_phase_2
_081283DC: .4byte sub_811FB28
-_081283E0: .4byte c2_exit_to_overworld_2_switch
+_081283E0: .4byte CB2_ReturnToField
thumb_func_end sub_81283A8
thumb_func_start hm_add_c3_without_phase_2
diff --git a/asm/player_pc.s b/asm/player_pc.s
index f847db1e6..b5149a435 100644
--- a/asm/player_pc.s
+++ b/asm/player_pc.s
@@ -627,12 +627,12 @@ sub_80EBB70: @ 80EBB70
ands r0, r1
cmp r0, 0
bne _080EBB9C
- bl sub_80563F0
- ldr r2, _080EBBA8 @ =c2_exit_to_overworld_2_switch
+ bl CleanupOverworldWindowsAndTilemaps
+ ldr r2, _080EBBA8 @ =CB2_ReturnToField
movs r0, 0x3
movs r1, 0
bl sub_8107DB4
- ldr r1, _080EBBAC @ =gUnknown_3005020
+ ldr r1, _080EBBAC @ =gFieldCallback
ldr r0, _080EBBB0 @ =sub_80EBC0C
str r0, [r1]
adds r0, r4, 0
@@ -643,8 +643,8 @@ _080EBB9C:
bx r0
.align 2, 0
_080EBBA4: .4byte gPaletteFade
-_080EBBA8: .4byte c2_exit_to_overworld_2_switch
-_080EBBAC: .4byte gUnknown_3005020
+_080EBBA8: .4byte CB2_ReturnToField
+_080EBBAC: .4byte gFieldCallback
_080EBBB0: .4byte sub_80EBC0C
thumb_func_end sub_80EBB70
@@ -740,14 +740,14 @@ sub_80EBC38: @ 80EBC38
adds r0, r6, r0
ldr r1, _080EBC70 @ =sub_80EBD18
str r1, [r0]
- ldr r1, _080EBC74 @ =gUnknown_3005020
+ ldr r1, _080EBC74 @ =gFieldCallback
ldr r0, _080EBC78 @ =sub_80EBCAC
str r0, [r1]
b _080EBC9C
.align 2, 0
_080EBC6C: .4byte gTasks+0x8
_080EBC70: .4byte sub_80EBD18
-_080EBC74: .4byte gUnknown_3005020
+_080EBC74: .4byte gFieldCallback
_080EBC78: .4byte sub_80EBCAC
_080EBC7C:
ldrb r0, [r4, 0x14]
@@ -808,9 +808,9 @@ sub_80EBCD8: @ 80EBCD8
ands r0, r1
cmp r0, 0
bne _080EBD06
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldrb r0, [r5, 0xC]
- ldr r1, _080EBD14 @ =c2_exit_to_overworld_2_switch
+ ldr r1, _080EBD14 @ =CB2_ReturnToField
bl sub_810D3F4
adds r0, r4, 0
bl DestroyTask
@@ -821,7 +821,7 @@ _080EBD06:
.align 2, 0
_080EBD0C: .4byte gTasks+0x8
_080EBD10: .4byte gPaletteFade
-_080EBD14: .4byte c2_exit_to_overworld_2_switch
+_080EBD14: .4byte CB2_ReturnToField
thumb_func_end sub_80EBCD8
thumb_func_start sub_80EBD18
@@ -1438,7 +1438,7 @@ sub_80EC1D4: @ 80EC1D4
cmp r0, 0
bne _080EC216
bl sub_810EDB0
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r2, _080EC220 @ =gSaveBlock1Ptr
ldr r1, _080EC224 @ =gUnknown_203AAC4
ldrh r0, [r1]
@@ -1543,17 +1543,17 @@ _080EC2B6:
thumb_func_start sub_80EC2C0
sub_80EC2C0: @ 80EC2C0
push {lr}
- ldr r0, _080EC2D4 @ =gUnknown_3005020
+ ldr r0, _080EC2D4 @ =gFieldCallback
ldr r1, _080EC2D8 @ =sub_80EC260
str r1, [r0]
- ldr r0, _080EC2DC @ =c2_exit_to_overworld_2_switch
+ ldr r0, _080EC2DC @ =CB2_ReturnToField
bl SetMainCallback2
pop {r0}
bx r0
.align 2, 0
-_080EC2D4: .4byte gUnknown_3005020
+_080EC2D4: .4byte gFieldCallback
_080EC2D8: .4byte sub_80EC260
-_080EC2DC: .4byte c2_exit_to_overworld_2_switch
+_080EC2DC: .4byte CB2_ReturnToField
thumb_func_end sub_80EC2C0
thumb_func_start sub_80EC2E0
@@ -1599,7 +1599,7 @@ sub_80EC324: @ 80EC324
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r0, 24
movs r1, 0x1
@@ -1753,7 +1753,7 @@ sub_80EC444: @ 80EC444
cmp r0, 0
bne _080EC468
bl sub_810EDB0
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
bl sub_81273D8
adds r0, r4, 0
bl DestroyTask
@@ -1834,17 +1834,17 @@ _080EC4F6:
thumb_func_start sub_80EC500
sub_80EC500: @ 80EC500
push {lr}
- ldr r0, _080EC514 @ =gUnknown_3005020
+ ldr r0, _080EC514 @ =gFieldCallback
ldr r1, _080EC518 @ =sub_80EC474
str r1, [r0]
- ldr r0, _080EC51C @ =c2_exit_to_overworld_2_switch
+ ldr r0, _080EC51C @ =CB2_ReturnToField
bl SetMainCallback2
pop {r0}
bx r0
.align 2, 0
-_080EC514: .4byte gUnknown_3005020
+_080EC514: .4byte gFieldCallback
_080EC518: .4byte sub_80EC474
-_080EC51C: .4byte c2_exit_to_overworld_2_switch
+_080EC51C: .4byte CB2_ReturnToField
thumb_func_end sub_80EC500
thumb_func_start sub_80EC520
diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s
index 33c3c0851..24094d9af 100644
--- a/asm/pokedex_screen.s
+++ b/asm/pokedex_screen.s
@@ -95,7 +95,7 @@ sub_810250C: @ 810250C
movs r0, 0x3
adds r2, r4, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
b _081025AE
.align 2, 0
_08102598: .4byte gUnknown_8451EBC
@@ -106,7 +106,7 @@ _081025A0:
movs r0, 0x3
adds r2, r4, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
_081025AE:
ldr r0, _081026A8 @ =gUnknown_8451ECC
bl InitWindows
diff --git a/asm/unk_8147500.s b/asm/pokemon_jump.s
index 53fc6a8a0..1af1fd10b 100644
--- a/asm/unk_8147500.s
+++ b/asm/pokemon_jump.s
@@ -5,118 +5,6 @@
.text
- thumb_func_start sub_8147500
-sub_8147500: @ 8147500
- push {lr}
- ldr r0, _08147518 @ =gSpecialVar_0x8004
- ldrh r1, [r0]
- ldr r0, _0814751C @ =gSpecialVar_0x8006
- ldrh r2, [r0]
- cmp r1, 0x8
- beq _08147512
- cmp r2, 0x8
- bne _08147520
-_08147512:
- movs r0, 0x1
- b _0814758E
- .align 2, 0
-_08147518: .4byte gSpecialVar_0x8004
-_0814751C: .4byte gSpecialVar_0x8006
-_08147520:
- cmp r1, 0
- beq _08147528
- cmp r2, 0
- bne _0814752C
-_08147528:
- movs r0, 0x7
- b _0814758E
-_0814752C:
- cmp r1, 0x9
- beq _08147534
- cmp r2, 0x9
- bne _08147538
-_08147534:
- movs r0, 0xA
- b _0814758E
-_08147538:
- cmp r1, 0xA
- beq _08147540
- cmp r2, 0xA
- bne _08147544
-_08147540:
- movs r0, 0xC
- b _0814758E
-_08147544:
- subs r0, r1, 0x1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- bhi _0814755C
- subs r0, r2, 0x1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- bhi _0814755C
- movs r0, 0x2
- b _0814758E
-_0814755C:
- subs r0, r1, 0x4
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _08147574
- subs r0, r2, 0x4
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _08147574
- movs r0, 0x3
- b _0814758E
-_08147574:
- subs r0, r1, 0x6
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _0814758C
- subs r0, r2, 0x6
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _0814758C
- movs r0, 0x5
- b _0814758E
-_0814758C:
- movs r0, 0x6
-_0814758E:
- pop {r1}
- bx r1
- thumb_func_end sub_8147500
-
- thumb_func_start sub_8147594
-sub_8147594: @ 8147594
- push {lr}
- ldr r0, _081475B0 @ =gSaveBlock1Ptr
- ldr r2, [r0]
- ldrh r1, [r2, 0x4]
- ldr r0, _081475B4 @ =0x00000503
- cmp r1, r0
- bne _081475B8
- movs r1, 0
- ldrsh r0, [r2, r1]
- cmp r0, 0x17
- bgt _081475B8
- movs r0, 0x1
- b _081475BA
- .align 2, 0
-_081475B0: .4byte gSaveBlock1Ptr
-_081475B4: .4byte 0x00000503
-_081475B8:
- movs r0, 0
-_081475BA:
- pop {r1}
- bx r1
- thumb_func_end sub_8147594
-
thumb_func_start sub_81475C0
sub_81475C0: @ 81475C0
push {r4,r5,lr}
diff --git a/asm/unk_8147AA8.s b/asm/pokemon_jump_2.s
index d430d7624..f47e312ff 100644
--- a/asm/unk_8147AA8.s
+++ b/asm/pokemon_jump_2.s
@@ -4875,7 +4875,7 @@ _08149DF0:
movs r0, 0
movs r1, 0xA
movs r2, 0xD0
- bl sub_814FE40
+ bl LoadUserWindowBorderGfx
movs r0, 0
bl CopyBgTilemapBufferToVram
movs r0, 0x2
@@ -5961,7 +5961,7 @@ _0814A73C:
thumb_func_start sub_814A744
sub_814A744: @ 814A744
push {lr}
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r0, 24
pop {r1}
@@ -6075,7 +6075,7 @@ sub_814A7D0: @ 814A7D0
movs r1, 0x2
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
add sp, 0x14
pop {r4,r5}
pop {r0}
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
index dada77eb3..848434a55 100644
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -1737,7 +1737,7 @@ _0808C680:
ands r0, r1
cmp r0, 0
bne _0808C69C
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldrb r0, [r5, 0xC]
bl sub_808CDE4
adds r0, r4, 0
@@ -1883,18 +1883,18 @@ sub_808C7B4: @ 808C7B4
bl sub_808FDF0
ldr r1, _0808C7D0 @ =gUnknown_20397A8
strb r0, [r1]
- ldr r1, _0808C7D4 @ =gUnknown_3005020
+ ldr r1, _0808C7D4 @ =gFieldCallback
ldr r0, _0808C7D8 @ =mapldr_0808C6D8
str r0, [r1]
- ldr r0, _0808C7DC @ =c2_exit_to_overworld_2_switch
+ ldr r0, _0808C7DC @ =CB2_ReturnToField
bl SetMainCallback2
pop {r0}
bx r0
.align 2, 0
_0808C7D0: .4byte gUnknown_20397A8
-_0808C7D4: .4byte gUnknown_3005020
+_0808C7D4: .4byte gFieldCallback
_0808C7D8: .4byte mapldr_0808C6D8
-_0808C7DC: .4byte c2_exit_to_overworld_2_switch
+_0808C7DC: .4byte CB2_ReturnToField
thumb_func_end sub_808C7B4
thumb_func_start sub_808C7E0
@@ -4700,7 +4700,7 @@ _0808DF24:
adds r0, 0x1
strb r0, [r1]
_0808DF3A:
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -5479,7 +5479,7 @@ _0808E59C:
.align 2, 0
_0808E5B8: .4byte gUnknown_20397B0
_0808E5BC:
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -6284,7 +6284,7 @@ _0808EC40:
.align 2, 0
_0808EC50: .4byte gMain
_0808EC54:
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -6426,7 +6426,7 @@ _0808ED74:
.align 2, 0
_0808ED84: .4byte gMain
_0808ED88:
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -6681,7 +6681,7 @@ sub_808EF8C: @ 808EF8C
movs r0, 0x3
movs r2, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r0, _0808EFC0 @ =gUnknown_83CE4D0
ldr r1, _0808EFC4 @ =0x0600f800
bl LZ77UnCompVram
@@ -6724,7 +6724,7 @@ sub_808EFE4: @ 808EFE4
movs r0, 0x1
movs r2, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r0, _0808F038 @ =gUnknown_83CE5FC
ldr r5, _0808F03C @ =gUnknown_20397B0
ldr r1, [r5]
@@ -8345,7 +8345,7 @@ sub_808FCE8: @ 808FCE8
str r1, [sp, 0x8]
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
lsls r4, 24
asrs r4, 24
adds r0, r4, 0
@@ -12046,7 +12046,7 @@ _08091938:
str r0, [sp]
movs r0, 0x2
movs r2, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
movs r0, 0x2
bl CopyBgTilemapBufferToVram
add sp, 0x4
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index 8cc6afe0f..7f5e31b7c 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -14088,7 +14088,7 @@ _0813B84E:
sub_813B854: @ 813B854
push {lr}
sub sp, 0x4
- ldr r3, _0813B86C @ =c2_exit_to_overworld_2_switch
+ ldr r3, _0813B86C @ =CB2_ReturnToField
movs r0, 0
str r0, [sp]
movs r1, 0
@@ -14098,7 +14098,7 @@ sub_813B854: @ 813B854
pop {r0}
bx r0
.align 2, 0
-_0813B86C: .4byte c2_exit_to_overworld_2_switch
+_0813B86C: .4byte CB2_ReturnToField
thumb_func_end sub_813B854
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/region_map.s b/asm/region_map.s
index 1072e3068..187da882f 100644
--- a/asm/region_map.s
+++ b/asm/region_map.s
@@ -118,13 +118,13 @@ sub_80BFEDC: @ 80BFEDC
str r2, [r4]
cmp r2, 0
bne _080BFF08
- ldr r0, _080BFF04 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _080BFF04 @ =CB2_ReturnToField
bl SetMainCallback2
b _080BFF38
.align 2, 0
_080BFEFC: .4byte gUnknown_20399D4
_080BFF00: .4byte 0x000047c0
-_080BFF04: .4byte c2_exit_to_overworld_2_switch
+_080BFF04: .4byte CB2_ReturnToField
_080BFF08:
ldr r1, _080BFF40 @ =gUnknown_2031DE0
movs r0, 0x1
@@ -172,13 +172,13 @@ sub_80BFF50: @ 80BFF50
str r2, [r4]
cmp r2, 0
bne _080BFF7C
- ldr r0, _080BFF78 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _080BFF78 @ =CB2_ReturnToField
bl SetMainCallback2
b _080BFFB4
.align 2, 0
_080BFF70: .4byte gUnknown_20399D4
_080BFF74: .4byte 0x000047c0
-_080BFF78: .4byte c2_exit_to_overworld_2_switch
+_080BFF78: .4byte CB2_ReturnToField
_080BFF7C:
ldr r1, _080BFFBC @ =gUnknown_2031DE0
movs r0, 0x1
@@ -6451,7 +6451,7 @@ _080C3300:
ldr r1, _080C3338 @ =0x000047bc
adds r0, r1
ldr r1, [r0]
- ldr r0, _080C333C @ =c2_exit_to_overworld_2_switch
+ ldr r0, _080C333C @ =CB2_ReturnToField
cmp r1, r0
bne _080C331A
_080C3318:
@@ -6474,7 +6474,7 @@ _080C332C:
.align 2, 0
_080C3334: .4byte gUnknown_20399D4
_080C3338: .4byte 0x000047bc
-_080C333C: .4byte c2_exit_to_overworld_2_switch
+_080C333C: .4byte CB2_ReturnToField
_080C3340: .4byte gUnknown_20399E4
_080C3344: .4byte sub_80C3348
thumb_func_end sub_80C31C0
@@ -10276,12 +10276,12 @@ _080C5220:
ldrb r0, [r0, 0x2]
cmp r0, 0x1
bne _080C5258
- ldr r0, _080C5254 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _080C5254 @ =CB2_ReturnToField
bl SetMainCallback2
b _080C525E
.align 2, 0
_080C5250: .4byte gUnknown_20399FC
-_080C5254: .4byte c2_exit_to_overworld_2_switch
+_080C5254: .4byte CB2_ReturnToField
_080C5258:
ldr r0, _080C5274 @ =sub_8124AB0
bl SetMainCallback2
diff --git a/asm/reshow_battle_screen.s b/asm/reshow_battle_screen.s
index d88ecf578..a9f23d1d4 100644
--- a/asm/reshow_battle_screen.s
+++ b/asm/reshow_battle_screen.s
@@ -661,7 +661,7 @@ _08077CD2:
lsls r1, 24
lsrs r1, 24
adds r0, r4, 0
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r5, _08077D98 @ =gMultiuseSpriteTemplate
adds r0, r7, 0
movs r1, 0x2
@@ -887,7 +887,7 @@ _08077EA8:
lsls r1, 24
lsrs r1, 24
adds r0, r4, 0
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r5, _08077FCC @ =gMultiuseSpriteTemplate
adds r0, r7, 0
movs r1, 0x2
diff --git a/asm/safari_zone.s b/asm/safari_zone.s
index b29c36739..48103dc9c 100644
--- a/asm/safari_zone.s
+++ b/asm/safari_zone.s
@@ -122,12 +122,12 @@ sub_80A0F4C: @ 80A0F4C
ldrb r0, [r0]
cmp r0, 0
beq _080A0F68
- ldr r0, _080A0F64 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _080A0F64 @ =CB2_ReturnToField
bl SetMainCallback2
b _080A0FB0
.align 2, 0
_080A0F60: .4byte gUnknown_2039994
-_080A0F64: .4byte c2_exit_to_overworld_2_switch
+_080A0F64: .4byte CB2_ReturnToField
_080A0F68:
ldr r0, _080A0F88 @ =gUnknown_2023E8A
ldrb r0, [r0]
@@ -136,7 +136,7 @@ _080A0F68:
ldr r0, _080A0F8C @ =gUnknown_81BFB87
bl ScriptContext2_RunNewScript
bl warp_in
- ldr r1, _080A0F90 @ =gUnknown_3005020
+ ldr r1, _080A0F90 @ =gFieldCallback
ldr r0, _080A0F94 @ =sub_807E3EC
str r0, [r1]
ldr r0, _080A0F98 @ =sub_805671C
@@ -145,7 +145,7 @@ _080A0F68:
.align 2, 0
_080A0F88: .4byte gUnknown_2023E8A
_080A0F8C: .4byte gUnknown_81BFB87
-_080A0F90: .4byte gUnknown_3005020
+_080A0F90: .4byte gFieldCallback
_080A0F94: .4byte sub_807E3EC
_080A0F98: .4byte sub_805671C
_080A0F9C:
diff --git a/asm/script_menu.s b/asm/script_menu.s
index 63caa179f..d917b5d5b 100644
--- a/asm/script_menu.s
+++ b/asm/script_menu.s
@@ -690,7 +690,7 @@ task_yes_no_maybe: @ 809CE54
.align 2, 0
_0809CE74: .4byte gTasks
_0809CE78:
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
movs r0, 0x1
diff --git a/asm/script_pokemon_util_80BF8FC.s b/asm/script_pokemon_util_80BF8FC.s
index eec41cf11..26c113dfd 100644
--- a/asm/script_pokemon_util_80BF8FC.s
+++ b/asm/script_pokemon_util_80BF8FC.s
@@ -112,14 +112,14 @@ sub_80BF9BC: @ 80BF9BC
subs r2, 0x1
lsls r2, 24
lsrs r2, 24
- ldr r3, _080BF9FC @ =c2_exit_to_overworld_2_switch
+ ldr r3, _080BF9FC @ =CB2_ReturnToField
movs r4, 0
str r4, [sp]
bl sub_8134738
movs r0, 0x3
bl sub_8138B38
- ldr r1, _080BFA00 @ =gUnknown_3005020
- ldr r0, _080BFA04 @ =sub_807DD24
+ ldr r1, _080BFA00 @ =gFieldCallback
+ ldr r0, _080BFA04 @ =FieldCallback_ReturnToEventScript2
str r0, [r1]
add sp, 0x4
pop {r4}
@@ -129,9 +129,9 @@ sub_80BF9BC: @ 80BF9BC
_080BF9F0: .4byte gPlayerParty
_080BF9F4: .4byte gSpecialVar_0x8004
_080BF9F8: .4byte gPlayerPartyCount
-_080BF9FC: .4byte c2_exit_to_overworld_2_switch
-_080BFA00: .4byte gUnknown_3005020
-_080BFA04: .4byte sub_807DD24
+_080BF9FC: .4byte CB2_ReturnToField
+_080BFA00: .4byte gFieldCallback
+_080BFA04: .4byte FieldCallback_ReturnToEventScript2
thumb_func_end sub_80BF9BC
thumb_func_start ScrSpecial_CountPokemonMoves
diff --git a/asm/shop.s b/asm/shop.s
index bdb2f8e9e..525fbbc45 100644
--- a/asm/shop.s
+++ b/asm/shop.s
@@ -288,18 +288,18 @@ _0809ACD0: .4byte sub_809AD40
thumb_func_start sub_809ACD4
sub_809ACD4: @ 809ACD4
push {lr}
- ldr r2, _0809ACEC @ =c2_exit_to_overworld_2_switch
+ ldr r2, _0809ACEC @ =CB2_ReturnToField
movs r0, 0x2
movs r1, 0x3
bl sub_8107DB4
- ldr r1, _0809ACF0 @ =gUnknown_3005020
+ ldr r1, _0809ACF0 @ =gFieldCallback
ldr r0, _0809ACF4 @ =sub_809AD74
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
-_0809ACEC: .4byte c2_exit_to_overworld_2_switch
-_0809ACF0: .4byte gUnknown_3005020
+_0809ACEC: .4byte CB2_ReturnToField
+_0809ACF0: .4byte gFieldCallback
_0809ACF4: .4byte sub_809AD74
thumb_func_end sub_809ACD4
@@ -1452,17 +1452,17 @@ _0809B66C: .4byte gUnknown_2039968
thumb_func_start sub_809B670
sub_809B670: @ 809B670
push {lr}
- ldr r0, _0809B684 @ =gUnknown_3005020
+ ldr r0, _0809B684 @ =gFieldCallback
ldr r1, _0809B688 @ =sub_809AD74
str r1, [r0]
- ldr r0, _0809B68C @ =c2_exit_to_overworld_2_switch
+ ldr r0, _0809B68C @ =CB2_ReturnToField
bl SetMainCallback2
pop {r0}
bx r0
.align 2, 0
-_0809B684: .4byte gUnknown_3005020
+_0809B684: .4byte gFieldCallback
_0809B688: .4byte sub_809AD74
-_0809B68C: .4byte c2_exit_to_overworld_2_switch
+_0809B68C: .4byte CB2_ReturnToField
thumb_func_end sub_809B670
thumb_func_start sub_809B690
@@ -2644,7 +2644,7 @@ sub_809C004: @ 809C004
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
- ldr r1, _0809C03C @ =gUnknown_3005020
+ ldr r1, _0809C03C @ =gFieldCallback
ldr r0, _0809C040 @ =sub_809AD74
str r0, [r1]
movs r0, 0x1
@@ -2666,7 +2666,7 @@ sub_809C004: @ 809C004
pop {r0}
bx r0
.align 2, 0
-_0809C03C: .4byte gUnknown_3005020
+_0809C03C: .4byte gFieldCallback
_0809C040: .4byte sub_809AD74
_0809C044: .4byte gTasks
_0809C048: .4byte sub_809C04C
@@ -2693,7 +2693,7 @@ sub_809C04C: @ 809C04C
movs r2, 0
bl DestroyListMenu
bl sub_809B604
- ldr r0, _0809C090 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _0809C090 @ =CB2_ReturnToField
bl SetMainCallback2
adds r0, r4, 0
bl DestroyTask
@@ -2704,7 +2704,7 @@ _0809C082:
.align 2, 0
_0809C088: .4byte gTasks+0x8
_0809C08C: .4byte gPaletteFade
-_0809C090: .4byte c2_exit_to_overworld_2_switch
+_0809C090: .4byte CB2_ReturnToField
thumb_func_end sub_809C04C
thumb_func_start nullsub_52
diff --git a/asm/slot_machine.s b/asm/slot_machine.s
index 8d4b0cd9e..02e17cbb0 100644
--- a/asm/slot_machine.s
+++ b/asm/slot_machine.s
@@ -629,7 +629,7 @@ _0813FD00:
strh r0, [r4]
b _0813FD78
_0813FD08:
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -3541,7 +3541,7 @@ _081411D0:
movs r0, 0
movs r1, 0xA
movs r2, 0xD0
- bl sub_814FE40
+ bl LoadUserWindowBorderGfx
movs r0, 0
movs r1, 0x1
movs r2, 0xF0
@@ -4603,7 +4603,7 @@ sub_8141AD8: @ 8141AD8
movs r1, 0x2
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
lsls r4, 24
asrs r4, 24
adds r0, r4, 0
diff --git a/asm/start_menu.s b/asm/start_menu.s
index d165dbc36..3fc08e41a 100644
--- a/asm/start_menu.s
+++ b/asm/start_menu.s
@@ -856,7 +856,7 @@ _0806F428:
bl IncrementGameStat
bl PlayRainStoppingSoundEffect
bl sub_806EF18
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r0, _0806F448 @ =sub_810275C
bl SetMainCallback2
movs r0, 0x1
@@ -883,7 +883,7 @@ _0806F460: .4byte gPaletteFade
_0806F464:
bl PlayRainStoppingSoundEffect
bl sub_806EF18
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r0, _0806F47C @ =CB2_PartyMenuFromStartMenu
bl SetMainCallback2
movs r0, 0x1
@@ -910,7 +910,7 @@ _0806F494: .4byte gPaletteFade
_0806F498:
bl PlayRainStoppingSoundEffect
bl sub_806EF18
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r0, _0806F4B0 @ =UseFameCheckerFromMenu
bl SetMainCallback2
movs r0, 0x1
@@ -937,7 +937,7 @@ _0806F4C8: .4byte gPaletteFade
_0806F4CC:
bl PlayRainStoppingSoundEffect
bl sub_806EF18
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r0, _0806F4E4 @ =sub_80568A8
bl sub_808B698
movs r0, 0x1
@@ -976,7 +976,7 @@ _0806F510: .4byte gPaletteFade
_0806F514:
bl PlayRainStoppingSoundEffect
bl sub_806EF18
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r0, _0806F534 @ =sub_8088388
bl SetMainCallback2
ldr r1, _0806F538 @ =gMain
@@ -1030,7 +1030,7 @@ sub_806F56C: @ 806F56C
_0806F580: .4byte gPaletteFade
_0806F584:
bl PlayRainStoppingSoundEffect
- bl sub_80563F0
+ bl CleanupOverworldWindowsAndTilemaps
ldr r0, _0806F59C @ =gUnknown_300502C
ldrb r0, [r0]
ldr r1, _0806F5A0 @ =sub_80568A8
@@ -1362,7 +1362,7 @@ _0806F7F4: .4byte sub_806F7F8
thumb_func_start sub_806F7F8
sub_806F7F8: @ 806F7F8
push {lr}
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -1481,7 +1481,7 @@ _0806F8D8: .4byte sub_806F8DC
thumb_func_start sub_806F8DC
sub_806F8DC: @ 806F8DC
push {lr}
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
diff --git a/asm/text_window.s b/asm/text_window.s
index 02a6efcfe..0b1a7a570 100644
--- a/asm/text_window.s
+++ b/asm/text_window.s
@@ -171,8 +171,8 @@ sub_814FDF4: @ 814FDF4
_0814FE3C: .4byte gUnknown_8471E8C
thumb_func_end sub_814FDF4
- thumb_func_start sub_814FE40
-sub_814FE40: @ 814FE40
+ thumb_func_start LoadUserWindowBorderGfx
+LoadUserWindowBorderGfx: @ 814FE40
push {r4,lr}
adds r4, r1, 0
adds r3, r2, 0
@@ -193,7 +193,7 @@ sub_814FE40: @ 814FE40
bx r0
.align 2, 0
_0814FE68: .4byte gSaveBlock2Ptr
- thumb_func_end sub_814FE40
+ thumb_func_end LoadUserWindowBorderGfx
thumb_func_start sub_814FE6C
sub_814FE6C: @ 814FE6C
diff --git a/asm/trade.s b/asm/trade.s
index d26aed7d8..1c6dd00a8 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -3432,7 +3432,7 @@ _0804E2A6:
movs r1, 0x3
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
ldr r0, [r4]
adds r0, 0x6F
movs r1, 0x4
@@ -3912,7 +3912,7 @@ _0804E670: .4byte 0x0000bbcc
thumb_func_start sub_804E674
sub_804E674: @ 804E674
push {r4,lr}
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r1, r0, 24
cmp r1, 0
@@ -4019,7 +4019,7 @@ _0804E740: .4byte gUnknown_2031DA8
thumb_func_start sub_804E744
sub_804E744: @ 804E744
push {r4,r5,lr}
- bl ProcessMenuInputNoWrap_
+ bl Menu_ProcessInputNoWrapClearOnChoose
lsls r0, 24
asrs r5, r0, 24
cmp r5, 0
@@ -4162,7 +4162,7 @@ sub_804E830: @ 804E830
movs r1, 0x3
movs r2, 0
movs r3, 0x2
- bl sub_810FF60
+ bl CreateYesNoMenu
ldr r0, [r4]
adds r0, 0xA8
strb r5, [r0]
@@ -7337,7 +7337,7 @@ _080500C8:
bl GetMonSpritePalStruct
ldrh r0, [r0, 0x4]
adds r1, r4, 0
- bl sub_803F7D4
+ bl SetMultiuseSpriteTemplateToPokemon
ldr r0, _08050128 @ =gMultiuseSpriteTemplate
movs r1, 0x78
movs r2, 0x3C
@@ -7841,7 +7841,7 @@ sub_80504CC: @ 80504CC
movs r0, 0x3
bl SetBgTilemapBuffer
bl DeactivateAllTextPrinters
- ldr r0, _080505B8 @ =gUnknown_8D00000
+ ldr r0, _080505B8 @ =gBattleTextboxTiles
mov r10, r0
movs r0, 0
mov r9, r0
@@ -7849,7 +7849,7 @@ sub_80504CC: @ 80504CC
mov r1, r10
movs r2, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r0, _080505BC @ =gFile_graphics_interface_menu_map_tilemap
mov r8, r0
ldr r4, _080505C0 @ =gDecompressionBuffer
@@ -7860,7 +7860,7 @@ sub_80504CC: @ 80504CC
adds r2, r5, 0
movs r3, 0
bl CopyToBgTilemapBuffer
- ldr r6, _080505C4 @ =gUnknown_8D004D8
+ ldr r6, _080505C4 @ =gBattleTextboxPalette
adds r0, r6, 0
movs r1, 0
movs r2, 0x20
@@ -7873,7 +7873,7 @@ sub_80504CC: @ 80504CC
mov r1, r10
movs r2, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
mov r0, r8
adds r1, r4, 0
bl LZDecompressWram
@@ -7896,10 +7896,10 @@ sub_80504CC: @ 80504CC
bx r0
.align 2, 0
_080505B4: .4byte gUnknown_826D1D4
-_080505B8: .4byte gUnknown_8D00000
+_080505B8: .4byte gBattleTextboxTiles
_080505BC: .4byte gFile_graphics_interface_menu_map_tilemap
_080505C0: .4byte gDecompressionBuffer
-_080505C4: .4byte gUnknown_8D004D8
+_080505C4: .4byte gBattleTextboxPalette
_080505C8: .4byte gUnknown_826D1BC
thumb_func_end sub_80504CC
@@ -8360,11 +8360,11 @@ _080509A4:
ldr r1, _08050A00 @ =0x00005206
movs r0, 0xC
bl SetGpuReg
- ldr r0, _08050A04 @ =gUnknown_8EAEA20
+ ldr r0, _08050A04 @ =gTradeGba2_Pal
movs r1, 0x10
movs r2, 0x60
bl LoadPalette
- ldr r3, _08050A08 @ =gUnknown_8EAEA80
+ ldr r3, _08050A08 @ =gTradeGba_Gfx
ldr r4, _08050A0C @ =0x06004000
movs r5, 0xA1
lsls r5, 5
@@ -8388,8 +8388,8 @@ _080509E6:
.align 2, 0
_080509FC: .4byte gUnknown_2031DAC
_08050A00: .4byte 0x00005206
-_08050A04: .4byte gUnknown_8EAEA20
-_08050A08: .4byte gUnknown_8EAEA80
+_08050A04: .4byte gTradeGba2_Pal
+_08050A08: .4byte gTradeGba_Gfx
_08050A0C: .4byte 0x06004000
_08050A10: .4byte 0x040000d4
_08050A14: .4byte 0x80000800
@@ -8436,7 +8436,7 @@ _08050A66:
ldr r1, _08050ABC @ =0x80000800
str r1, [r0, 0x8]
ldr r0, [r0, 0x8]
- ldr r3, _08050AC0 @ =gUnknown_8EAEA80
+ ldr r3, _08050AC0 @ =gTradeGba_Gfx
movs r4, 0xC0
lsls r4, 19
movs r5, 0xA1
@@ -8471,7 +8471,7 @@ _08050AB0: .4byte gUnknown_8269A5C
_08050AB4: .4byte 0x06002800
_08050AB8: .4byte 0x040000d4
_08050ABC: .4byte 0x80000800
-_08050AC0: .4byte gUnknown_8EAEA80
+_08050AC0: .4byte gTradeGba_Gfx
_08050AC4:
ldr r0, _08050AF4 @ =gUnknown_2031DAC
ldr r2, [r0]
@@ -8769,11 +8769,11 @@ _08050D48:
ldr r1, _08050DC0 @ =0x00005206
movs r0, 0xC
bl SetGpuReg
- ldr r0, _08050DC4 @ =gUnknown_8EAEA20
+ ldr r0, _08050DC4 @ =gTradeGba2_Pal
movs r1, 0x10
movs r2, 0x60
bl LoadPalette
- ldr r3, _08050DC8 @ =gUnknown_8EAEA80
+ ldr r3, _08050DC8 @ =gTradeGba_Gfx
ldr r4, _08050DCC @ =0x06004000
movs r5, 0xA1
lsls r5, 5
@@ -8800,7 +8800,7 @@ _08050D98:
orrs r0, r7
str r0, [r1, 0x8]
ldr r0, [r1, 0x8]
- ldr r1, _08050DD8 @ =gUnknown_826601C
+ ldr r1, _08050DD8 @ =gUnknown_08331F60
ldr r2, _08050DDC @ =0x06009000
ldr r0, _08050DD0 @ =0x040000d4
str r1, [r0]
@@ -8816,12 +8816,12 @@ _08050DB4:
.align 2, 0
_08050DBC: .4byte gUnknown_2031DAC
_08050DC0: .4byte 0x00005206
-_08050DC4: .4byte gUnknown_8EAEA20
-_08050DC8: .4byte gUnknown_8EAEA80
+_08050DC4: .4byte gTradeGba2_Pal
+_08050DC8: .4byte gTradeGba_Gfx
_08050DCC: .4byte 0x06004000
_08050DD0: .4byte 0x040000d4
_08050DD4: .4byte 0x80000800
-_08050DD8: .4byte gUnknown_826601C
+_08050DD8: .4byte gUnknown_08331F60
_08050DDC: .4byte 0x06009000
thumb_func_end sub_8050968
@@ -11137,7 +11137,7 @@ _080522BC:
bl Free
str r4, [r7]
_0805230A:
- ldr r0, _08052328 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _08052328 @ =CB2_ReturnToField
bl SetMainCallback2
bl sub_8053AE4
bl sub_812B484
@@ -11150,7 +11150,7 @@ _0805231A:
bx r1
.align 2, 0
_08052324: .4byte gPaletteFade
-_08052328: .4byte c2_exit_to_overworld_2_switch
+_08052328: .4byte CB2_ReturnToField
thumb_func_end sub_8050F3C
thumb_func_start sub_805232C
@@ -13362,7 +13362,7 @@ _08053718:
bl Free
str r4, [r7]
_08053766:
- ldr r0, _08053784 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _08053784 @ =CB2_ReturnToField
bl SetMainCallback2
bl sub_8053AE4
bl sub_812B484
@@ -13375,7 +13375,7 @@ _08053776:
bx r1
.align 2, 0
_08053780: .4byte gPaletteFade
-_08053784: .4byte c2_exit_to_overworld_2_switch
+_08053784: .4byte CB2_ReturnToField
thumb_func_end sub_805232C
thumb_func_start sub_8053788
@@ -14875,8 +14875,8 @@ sub_8054470: @ 8054470
bne _08054494
ldr r0, _080544A0 @ =sub_80505CC
bl SetMainCallback2
- ldr r1, _080544A4 @ =gUnknown_3005020
- ldr r0, _080544A8 @ =sub_807DD24
+ ldr r1, _080544A4 @ =gFieldCallback
+ ldr r0, _080544A8 @ =FieldCallback_ReturnToEventScript2
str r0, [r1]
adds r0, r4, 0
bl DestroyTask
@@ -14887,8 +14887,8 @@ _08054494:
.align 2, 0
_0805449C: .4byte gPaletteFade
_080544A0: .4byte sub_80505CC
-_080544A4: .4byte gUnknown_3005020
-_080544A8: .4byte sub_807DD24
+_080544A4: .4byte gFieldCallback
+_080544A8: .4byte FieldCallback_ReturnToEventScript2
thumb_func_end sub_8054470
thumb_func_start sub_80544AC
diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s
index 6826bdb77..1a9681b3b 100644
--- a/asm/union_room_chat.s
+++ b/asm/union_room_chat.s
@@ -1720,7 +1720,7 @@ _081291E8:
bl sub_812B4B8
bl sub_8129B88
bl sub_81284BC
- ldr r0, _08129214 @ =c2_exit_to_overworld_2_switch
+ ldr r0, _08129214 @ =CB2_ReturnToField
bl SetMainCallback2
_08129206:
add sp, 0x4
@@ -1729,7 +1729,7 @@ _08129206:
bx r0
.align 2, 0
_08129210: .4byte gPaletteFade
-_08129214: .4byte c2_exit_to_overworld_2_switch
+_08129214: .4byte CB2_ReturnToField
thumb_func_end sub_8128FB8
thumb_func_start sub_8129218
diff --git a/asm/unk_810C3A4.s b/asm/unk_810C3A4.s
deleted file mode 100644
index cabaac727..000000000
--- a/asm/unk_810C3A4.s
+++ /dev/null
@@ -1,389 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_810C3A4
-sub_810C3A4: @ 810C3A4
- push {lr}
- ldr r0, _0810C3B4 @ =sub_810C3B8
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_0810C3B4: .4byte sub_810C3B8
- thumb_func_end sub_810C3A4
-
- thumb_func_start sub_810C3B8
-sub_810C3B8: @ 810C3B8
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _0810C43C @ =gTasks
- adds r5, r0, r1
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0810C3E2
- bl walkrun_is_standing_still
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bne _0810C3E2
- bl sub_805C270
- strh r4, [r5, 0x8]
-_0810C3E2:
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0810C41C
- movs r4, 0
- ldr r7, _0810C440 @ =gMapObjects
-_0810C3EE:
- adds r0, r4, 0
- bl sub_810CF04
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0810C412
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- adds r1, r0, r7
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- blt _0810C436
- adds r0, r1, 0
- bl FreezeMapObject
-_0810C412:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _0810C3EE
-_0810C41C:
- movs r0, 0x1
- strh r0, [r5, 0xA]
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _0810C436
- adds r0, r6, 0
- bl DestroyTask
- bl sub_805C780
- bl EnableBothScriptContexts
-_0810C436:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0810C43C: .4byte gTasks
-_0810C440: .4byte gMapObjects
- thumb_func_end sub_810C3B8
-
- thumb_func_start sub_810C444
-sub_810C444: @ 810C444
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- ldr r0, _0810C4E0 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0x8E
- lsls r1, 4
- adds r1, r0
- mov r8, r1
- movs r7, 0
- ldr r0, _0810C4E4 @ =gMapHeader
- ldr r1, [r0, 0x4]
- adds r2, r0, 0
- ldrb r1, [r1]
- cmp r7, r1
- bcs _0810C4D2
-_0810C466:
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 3
- mov r1, r8
- adds r5, r0, r1
- ldrh r0, [r5, 0xC]
- cmp r0, 0x1
- beq _0810C47A
- cmp r0, 0x3
- bne _0810C4C4
-_0810C47A:
- ldrb r0, [r5, 0x9]
- subs r0, 0x4D
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bhi _0810C4C4
- bl sub_810CF54
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r0, [r5]
- ldr r1, _0810C4E0 @ =gSaveBlock1Ptr
- ldr r2, [r1]
- ldrb r1, [r2, 0x5]
- ldrb r2, [r2, 0x4]
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- mov r0, sp
- ldrb r0, [r0]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r2, _0810C4E8 @ =gMapObjects
- adds r4, r1, r2
- bl sub_810CF04
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0810C4C0
- adds r0, r4, 0
- adds r1, r6, 0
- bl npc_set_running_behaviour_etc
-_0810C4C0:
- strb r6, [r5, 0x9]
- ldr r2, _0810C4E4 @ =gMapHeader
-_0810C4C4:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, [r2, 0x4]
- ldrb r0, [r0]
- cmp r7, r0
- bcc _0810C466
-_0810C4D2:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0810C4E0: .4byte gSaveBlock1Ptr
-_0810C4E4: .4byte gMapHeader
-_0810C4E8: .4byte gMapObjects
- thumb_func_end sub_810C444
-
- thumb_func_start sub_810C4EC
-sub_810C4EC: @ 810C4EC
- push {r4-r7,lr}
- movs r0, 0xB5
- lsls r0, 1
- movs r1, 0x1
- bl CheckBagHasItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0810C516
- ldr r0, _0810C568 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r2, 0xC7
- lsls r2, 3
- adds r1, r0, r2
- ldrh r2, [r1]
- ldrb r0, [r1]
- cmp r0, 0x63
- bhi _0810C516
- adds r0, r2, 0x1
- strh r0, [r1]
-_0810C516:
- ldr r7, _0810C56C @ =0x00000801
- adds r0, r7, 0
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0810C570
- ldr r6, _0810C568 @ =gSaveBlock1Ptr
- ldr r0, [r6]
- movs r5, 0xC7
- lsls r5, 3
- adds r3, r0, r5
- ldrh r2, [r3]
- lsrs r1, r2, 8
- movs r4, 0xFF
- cmp r1, 0x63
- bhi _0810C548
- adds r1, 0x1
- lsls r1, 24
- movs r0, 0xFF
- ands r0, r2
- lsrs r1, 16
- orrs r0, r1
- strh r0, [r3]
-_0810C548:
- ldr r0, [r6]
- adds r0, r5
- ldrh r0, [r0]
- lsrs r0, 8
- ands r0, r4
- cmp r0, 0x64
- bne _0810C570
- adds r0, r7, 0
- bl FlagClear
- bl sub_810C640
- bl sub_810D0D0
- movs r0, 0x1
- b _0810C572
- .align 2, 0
-_0810C568: .4byte gSaveBlock1Ptr
-_0810C56C: .4byte 0x00000801
-_0810C570:
- movs r0, 0
-_0810C572:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_810C4EC
-
- thumb_func_start sub_810C578
-sub_810C578: @ 810C578
- push {lr}
- ldr r0, _0810C590 @ =0x00000801
- bl FlagClear
- bl sub_810C640
- bl sub_810D0D0
- bl sub_810C594
- pop {r0}
- bx r0
- .align 2, 0
-_0810C590: .4byte 0x00000801
- thumb_func_end sub_810C578
-
- thumb_func_start sub_810C594
-sub_810C594: @ 810C594
- push {r4-r7,lr}
- movs r5, 0
- movs r6, 0
-_0810C59A:
- lsls r0, r5, 3
- adds r0, r5
- lsls r0, 2
- ldr r1, _0810C5FC @ =gMapObjects
- adds r4, r0, r1
- ldrb r0, [r4, 0x6]
- subs r0, 0x4D
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bhi _0810C5EA
- bl sub_810CF54
- lsls r0, 24
- lsrs r3, r0, 24
- ldrb r0, [r4]
- lsls r0, 31
- cmp r0, 0
- beq _0810C5EA
- ldr r2, _0810C600 @ =gSprites
- ldrb r0, [r4, 0x4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r7, 0x2E
- ldrsh r0, [r1, r7]
- cmp r0, r5
- bne _0810C5EA
- strh r6, [r1, 0x24]
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r6, [r0, 0x26]
- adds r0, r4, 0
- adds r1, r3, 0
- bl npc_set_running_behaviour_etc
-_0810C5EA:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0xF
- bls _0810C59A
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0810C5FC: .4byte gMapObjects
-_0810C600: .4byte gSprites
- thumb_func_end sub_810C594
-
- thumb_func_start sub_810C604
-sub_810C604: @ 810C604
- ldr r0, _0810C61C @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0xC7
- lsls r0, 3
- adds r1, r0
- ldrh r2, [r1]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r2
- strh r0, [r1]
- bx lr
- .align 2, 0
-_0810C61C: .4byte gSaveBlock1Ptr
- thumb_func_end sub_810C604
-
- thumb_func_start sub_810C620
-sub_810C620: @ 810C620
- ldr r0, _0810C63C @ =gSaveBlock1Ptr
- ldr r2, [r0]
- movs r0, 0xC7
- lsls r0, 3
- adds r2, r0
- ldrh r1, [r2]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- movs r1, 0x64
- orrs r0, r1
- strh r0, [r2]
- bx lr
- .align 2, 0
-_0810C63C: .4byte gSaveBlock1Ptr
- thumb_func_end sub_810C620
-
- thumb_func_start sub_810C640
-sub_810C640: @ 810C640
- ldr r0, _0810C650 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xC7
- lsls r1, 3
- adds r0, r1
- ldrb r1, [r0]
- strh r1, [r0]
- bx lr
- .align 2, 0
-_0810C650: .4byte gSaveBlock1Ptr
- thumb_func_end sub_810C640
-
- thumb_func_start sub_810C654
-sub_810C654: @ 810C654
- ldr r0, _0810C66C @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0xC7
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- movs r3, 0xC8
- lsls r3, 7
- adds r2, r3, 0
- orrs r0, r2
- strh r0, [r1]
- bx lr
- .align 2, 0
-_0810C66C: .4byte gSaveBlock1Ptr
- thumb_func_end sub_810C654
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/wireless_communication_status_screen.s b/asm/wireless_communication_status_screen.s
index 72368171f..451ab60b9 100644
--- a/asm/wireless_communication_status_screen.s
+++ b/asm/wireless_communication_status_screen.s
@@ -80,7 +80,7 @@ sub_814F1E4: @ 814F1E4
movs r0, 0x1
movs r2, 0
movs r3, 0
- bl sub_80F696C
+ bl DecompressAndLoadBgGfxUsingHeap
ldr r1, _0814F314 @ =gUnknown_846F8E0
movs r0, 0x1
movs r2, 0
diff --git a/data/data.s b/data/data.s
index 1106adee3..499e3c9db 100644
--- a/data/data.s
+++ b/data/data.s
@@ -550,36 +550,6 @@ gUnknown_825E05C:: @ 825E05C
.section .rodata.825EF0C
.align 2
-gUnknown_825F844:: @ 825F842
- .incbin "baserom.gba", 0x25f844, 0x8d8
-
-gUnknown_826011C:: @ 826011C
- .incbin "baserom.gba", 0x26011C, 0x8
-
-gUnknown_8260124:: @ 8260124
- .incbin "baserom.gba", 0x260124, 0x8
-
-gUnknown_826012C:: @ 826012C
- .incbin "baserom.gba", 0x26012C, 0x8
-
-gUnknown_8260134:: @ 8260134
- .incbin "baserom.gba", 0x260134, 0x50
-
-gUnknown_8260184:: @ 8260184
- .incbin "baserom.gba", 0x260184, 0x18
-
-gUnknown_826019C:: @ 826019C
- .incbin "baserom.gba", 0x26019C, 0x8
-
-gUnknown_82601A4:: @ 82601A4
- .incbin "baserom.gba", 0x2601A4, 0x10
-
-gUnknown_82601B4:: @ 82601B4
- .incbin "baserom.gba", 0x2601B4, 0x8
-
-gUnknown_82601BC:: @ 82601BC
- .incbin "baserom.gba", 0x2601BC, 0x4C
-
gUnknown_8260208:: @ 8260208
.incbin "baserom.gba", 0x260208, 0x8
@@ -763,7 +733,7 @@ gUnknown_8262055:: @ 8262055
gUnknown_826407C:: @ 826407C
.incbin "baserom.gba", 0x26407C, 0x1FA0
-gUnknown_826601C:: @ 826601C
+gUnknown_08331F60:: @ 826601C
.incbin "baserom.gba", 0x26601C, 0x1000
gUnknown_826701C:: @ 826701C
diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s
index f911f30ec..bcf6b8516 100644
--- a/data/data_83FECCC.s
+++ b/data/data_83FECCC.s
@@ -1888,10 +1888,10 @@ gUnknown_841B6EC:: @ 841B6EC
gUnknown_841B6F3:: @ 841B6F3
.incbin "baserom.gba", 0x41B6F3, 0xA
-gUnknown_841B6FD:: @ 841B6FD
+gText_HatchedFromEgg:: @ 841B6FD
.incbin "baserom.gba", 0x41B6FD, 0x19
-gUnknown_841B716:: @ 841B716
+gText_NickHatchPrompt:: @ 841B716
.incbin "baserom.gba", 0x41B716, 0x31
gUnknown_841B747:: @ 841B747
diff --git a/data/data_8468C98.s b/data/data_8468C98.s
index 828932cc6..0f3b039c1 100644
--- a/data/data_8468C98.s
+++ b/data/data_8468C98.s
@@ -5,19 +5,59 @@
.align 2
gUnknown_846AFE8:: @ 846AFE8
- .incbin "baserom.gba", 0x46AFE8, 0x444
+ .incbin "graphics/misc/unk_846B008.gbapal"
+
+gUnknown_846B008:: @ 846B008
+ .incbin "graphics/misc/unk_846B008.4bpp.lz"
gUnknown_846B42C:: @ 846B42C
- .incbin "baserom.gba", 0x46B42C, 0x10
+ obj_tiles gUnknown_846B008, 0x0c00, 0x2000
+ null_obj_tiles
gUnknown_846B43C:: @ 846B43C
- .incbin "baserom.gba", 0x46B43C, 0x58
+ obj_pal gUnknown_846AFE8, 0x2000
+ null_obj_pal
+
+gUnknown_846B44C:: @ 846B44C
+ obj_image_anim_frame 0x00, 0
+ obj_image_anim_end
+
+gUnknown_846B454:: @ 846B454
+ obj_image_anim_frame 0x10, 0
+ obj_image_anim_end
+
+gUnknown_846B45C:: @ 846B45C
+ obj_image_anim_frame 0x20, 0
+ obj_image_anim_end
+
+gUnknown_846B464:: @ 846B464
+ obj_image_anim_frame 0x40, 0
+ obj_image_anim_end
+
+gUnknown_846B46C:: @ 846B46C
+ obj_image_anim_frame 0x30, 0
+ obj_image_anim_end
+
+gUnknown_846B474:: @ 846B474
+ obj_image_anim_frame 0x50, 0
+ obj_image_anim_end
+
+gUnknown_846B47C::
+ .4byte gUnknown_846B44C
+ .4byte gUnknown_846B454
+ .4byte gUnknown_846B45C
+ .4byte gUnknown_846B464
+ .4byte gUnknown_846B46C
+ .4byte gUnknown_846B474
gUnknown_846B494:: @ 846B494
- .incbin "baserom.gba", 0x46B494, 0x18
+ spr_template 0x2000, 0x2000, gOamData_83AC9D8, gUnknown_846B47C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_846B4AC:: @ 846B4AC
- .incbin "baserom.gba", 0x46B4AC, 0x10
+ @ This is a 2D array with one row.
+ @ Why this was done this way is beyond me.
+ @ The data that follow this row are not at all function pointers.
+ .4byte sub_81477C0, sub_814784C, sub_81479D4, sub_8147A34
gUnknown_846B4BC:: @ 846B4BC
.incbin "baserom.gba", 0x46B4BC, 0x190
diff --git a/data/graphics.s b/data/graphics.s
index 242dd149e..ff9ed3d7e 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -1,9 +1,9 @@
.section gfx_data, "aw", %progbits
-gUnknown_8D00000:: @ 8D00000
+gBattleTextboxTiles:: @ 8D00000
.incbin "baserom.gba", 0xD00000, 0x4D8
-gUnknown_8D004D8:: @ 8D004D8
+gBattleTextboxPalette:: @ 8D004D8
.incbin "baserom.gba", 0xD004D8, 0x44
.align 2
@@ -16397,10 +16397,10 @@ gUnknown_8EAE900:: @ 8EAE900
gUnknown_8EAEA00:: @ 8EAEA00
.incbin "baserom.gba", 0xEAEA00, 0x20 @UNKNOWN
-gUnknown_8EAEA20:: @ 8EAEA20
+gTradeGba2_Pal:: @ 8EAEA20
.incbin "baserom.gba", 0xEAEA20, 0x60 @UNKNOWN
-gUnknown_8EAEA80:: @ 8EAEA80
+gTradeGba_Gfx:: @ 8EAEA80
.incbin "baserom.gba", 0xEAEA80, 0x1420 @UNKNOWN
gUnknown_8EAFEA0:: @ 8EAFEA0
diff --git a/data/specials.inc b/data/specials.inc
index dba67f852..501ca0457 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -203,7 +203,7 @@ gSpecials:: @ 815FD60
def_special GetDaycareCost
def_special TakePokemonFromDaycare
def_special ScriptHatchMon
- def_special sub_8046FD4
+ def_special EggHatch
def_special sub_8046EAC
def_special sub_80CD228
def_special IsEnoughForCostInVar0x8005
diff --git a/graphics/misc/egg_hatch.png b/graphics/misc/egg_hatch.png
new file mode 100644
index 000000000..d8a3e432c
--- /dev/null
+++ b/graphics/misc/egg_hatch.png
Binary files differ
diff --git a/graphics/misc/egg_shard.png b/graphics/misc/egg_shard.png
new file mode 100644
index 000000000..0d88590dc
--- /dev/null
+++ b/graphics/misc/egg_shard.png
Binary files differ
diff --git a/graphics/misc/unk_846B008.png b/graphics/misc/unk_846B008.png
new file mode 100644
index 000000000..4fed89d24
--- /dev/null
+++ b/graphics/misc/unk_846B008.png
Binary files differ
diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk
index a04858121..f0094f070 100644
--- a/graphics_file_rules.mk
+++ b/graphics_file_rules.mk
@@ -473,3 +473,6 @@ $(GLOBALGFXDIR)/fame_checker_bg.4bpp: %.4bpp: %.png
data/seagallop/water.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 41
+
+$(MISCGFXDIR)/unk_846B008.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
diff --git a/include/constants/songs.h b/include/constants/songs.h
index fc42af3fc..dd9335761 100644
--- a/include/constants/songs.h
+++ b/include/constants/songs.h
@@ -257,7 +257,9 @@
#define MUS_ME_BACHI 260
#define MUS_ME_WAZA 261
#define MUS_ME_KINOMI 262
+#define MUS_ME_SHINKA 263
#define BGM_FRLG_SAFARI_ZONE 264
+#define MUS_SHINKA BGM_FRLG_SAFARI_ZONE
#define MUS_ME_B_BIG 268
#define MUS_ME_B_SMALL 269
#define MUS_ME_WASURE 270
diff --git a/include/daycare.h b/include/daycare.h
index 6544ba21a..08ca11187 100644
--- a/include/daycare.h
+++ b/include/daycare.h
@@ -26,4 +26,10 @@ bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio);
void ShowDaycareLevelMenu(void);
void ChooseSendDaycareMon(void);
+void ScriptHatchMon(void);
+bool8 sub_8071614(void);
+void EggHatch(void);
+u8 GetEggStepsToSubtract(void);
+u16 sub_80722E0(void);
+
#endif // GUARD_DAYCARE_H
diff --git a/include/decompress.h b/include/decompress.h
index c2c4f0e1c..9a2093b9f 100644
--- a/include/decompress.h
+++ b/include/decompress.h
@@ -27,6 +27,7 @@ void DecompressPicFromTable_DontHandleDeoxys(const struct CompressedSpriteSheet
void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality);
void HandleLoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality);
void HandleLoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality);
+void sub_800ECC4(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality);
void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic);
void LoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic);
diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h
index 228ff3bfb..d0856c84c 100644
--- a/include/field_fadetransition.h
+++ b/include/field_fadetransition.h
@@ -13,5 +13,6 @@ void sub_807E59C(void);
void sub_807E500(void);
void sub_807DF64(void);
void sub_807DC18(void);
+void FieldCallback_ReturnToEventScript2(void);
#endif // GUARD_FIELD_FADETRANSITION_H
diff --git a/include/global.h b/include/global.h
index 60185af00..461402f1f 100644
--- a/include/global.h
+++ b/include/global.h
@@ -692,6 +692,12 @@ struct TrainerTowerLog
u8 unkA_6:2;
};
+struct TrainerRematchState
+{
+ u16 stepCounter;
+ u8 rematches[100];
+};
+
struct SaveBlock1
{
/*0x0000*/ struct Coords16 pos;
@@ -719,7 +725,7 @@ struct SaveBlock1
/*0x05F8*/ u8 seen1[DEX_FLAGS_NO];
/*0x062C*/ u16 berryBlenderRecords[3]; // unused
/*0x0632*/ u8 field_632[6]; // unused?
- /*0x0638*/ u8 trainerRematchStepCounter;
+ /*0x0638*/ u16 trainerRematchStepCounter;
/*0x063A*/ u8 ALIGNED(2) trainerRematches[100];
/*0x06A0*/ struct MapObject mapObjects[MAP_OBJECTS_COUNT];
/*0x08E0*/ struct MapObjectTemplate mapObjectTemplates[64];
diff --git a/include/graphics.h b/include/graphics.h
index 83cc19bb3..04d05da2b 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -161,4 +161,11 @@ extern const u32 gUnknown_8E84F20[];
extern const u32 gUnknown_8E85068[];
extern const u8 gUnknown_8E99118[];
+// egg_hatch
+extern const u32 gBattleTextboxTiles[];
+extern const u32 gFile_graphics_interface_menu_map_tilemap[];
+extern const u32 gBattleTextboxPalette[];
+extern const u32 gTradeGba2_Pal[];
+extern const u32 gTradeGba_Gfx[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/map_obj_80688E4.h b/include/map_obj_80688E4.h
index 9ab76646d..de871fd64 100644
--- a/include/map_obj_80688E4.h
+++ b/include/map_obj_80688E4.h
@@ -4,5 +4,6 @@
#include "global.h"
void player_bitmagic(void);
+void FreezeMapObject(struct MapObject *);
#endif //GUARD_MAP_OBJ_80688E4_H
diff --git a/include/map_obj_lock.h b/include/map_obj_lock.h
index 2927ca26d..0d130973b 100644
--- a/include/map_obj_lock.h
+++ b/include/map_obj_lock.h
@@ -10,5 +10,6 @@ void LockSelectedMapObject(void);
void sub_8098630(void);
bool8 sub_8098734(void);
void sub_80696C0(void);
+bool8 walkrun_is_standing_still(void);
#endif // GUARD_MAP_OBJ_LOCK_H
diff --git a/include/menu.h b/include/menu.h
index 4a5bd8a2c..40c7ffc12 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -30,8 +30,8 @@ void reset_temp_tile_data_buffers(void);
int decompress_and_copy_tile_data_to_vram(u8 bg_id, const void *src, int size, u16 offset, u8 mode);
bool8 free_temp_tile_data_buffers_if_possible(void);
u64 sub_8198A50(struct WindowTemplate*, u8, u8, u8, u8, u8, u8, u16); // returns something but it isn't used, fix when menu.s is decomp'd
-void CreateYesNoMenu(const struct WindowTemplate *windowTemplate, u16 borderFirstTileNum, u8 borderPalette, u8 initialCursorPos);
-s8 ProcessMenuInputNoWrap_(void);
+//void CreateYesNoMenu(const struct WindowTemplate *windowTemplate, u16 borderFirstTileNum, u8 borderPalette, u8 initialCursorPos);
+s8 Menu_ProcessInputNoWrapClearOnChoose(void);
void do_scheduled_bg_tilemap_copies_to_vram(void);
void clear_scheduled_bg_copies_to_vram(void);
void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const struct TextColor *color, s8 speed, const u8 *str);
@@ -44,7 +44,7 @@ void PrintTextOnRightSnappedWindow(const u8 *, u32, u8);
void sub_810F71C(void);
void sub_810F740(void);
u8 ProgramAndPlaceMenuCursorOnWindow(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPosition);
-void sub_810FF60(const struct WindowTemplate *, u8, u8, u8, u16, u8, u8);
+void CreateYesNoMenu(const struct WindowTemplate *, u8, u8, u8, u16, u8, u8);
void StartBlendTask(u8 eva_start, u8 evb_start, u8 eva_end, u8 evb_end, u8 ev_step, u8 priority);
bool8 IsBlendTaskActive(void);
diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h
index d24b7e3e5..b3daf43c6 100644
--- a/include/new_menu_helpers.h
+++ b/include/new_menu_helpers.h
@@ -30,7 +30,7 @@ void Menu_LoadStdPalAt(u16);
void * malloc_and_decompress(const void * src, u32 * size);
u16 sub_80F796C(void);
void sub_80F6B08(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette);
-void sub_80F696C(u8 bgId, const void * gfx, u32 size, u16 a3, u8 a4);
+void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void * gfx, u32 size, u16 a3, u8 a4);
void ClearStdWindowAndFrame(u8 taskId, bool8 copyNow);
#endif // GUARD_NEW_MENU_HELPERS_H
diff --git a/include/overworld.h b/include/overworld.h
index ac3d5283f..f03db2a3a 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -63,7 +63,7 @@ void strange_npc_table_clear(void);
const struct MapHeader *get_mapheader_by_bank_and_number(u16, u16);
void FieldObjectMoveDestCoords(struct MapObject *, u32, s16 *, s16 *);
void sub_8086230(void);
-void c2_exit_to_overworld_2_switch(void);
+void CB2_ReturnToField(void);
bool32 sub_8087598(void);
void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
void warp_in(void);
@@ -84,19 +84,19 @@ void sub_805726C(void);
void sub_8057430(void);
void sub_8055DC4(void);
-u8 sav1_map_get_name(void);
+u8 GetCurrentRegionMapSectionId(void);
void SetCurrentMapLayout(u16 mapDataId);
void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y);
void ResetInitialPlayerAvatarState(void);
void sub_8055D40(u16 mapDataId);
-void sub_80563F0(void);
+void CleanupOverworldWindowsAndTilemaps(void);
extern u8 gUnknown_2031DD8;
extern u8 gUnknown_2036E28;
-extern void (*gUnknown_3005020)(void);
+extern void (*gFieldCallback)(void);
extern bool8 (* gFieldCallback2)(void);
void SetLastHealLocationWarp(u8 healLocaionId);
diff --git a/include/pokemon.h b/include/pokemon.h
index bf2326ff8..a6dd9931b 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -633,6 +633,7 @@ void SetWildMonHeldItem(void);
u16 GetMonEVCount(struct Pokemon *);
const struct CompressedSpritePalette *sub_806E794(struct Pokemon *mon);
+const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon);
const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality);
bool32 IsHMMove2(u16 move);
bool8 IsPokeSpriteNotFlipped(u16 species);
@@ -675,6 +676,6 @@ void BattleAnimateBackSprite(struct Sprite* sprite, u16 species);
void PlayMapChosenOrBattleBGM(u16 songId);
u8 GetMonsStateToDoubles(void);
void sub_803E0A4(struct Pokemon *mon, struct BattleTowerPokemon *src);
-void sub_803F7D4(u16 trainerSpriteId, u8 battlerPosition);
+void SetMultiuseSpriteTemplateToPokemon(u16 trainerSpriteId, u8 battlerPosition);
#endif // GUARD_POKEMON_H
diff --git a/include/text_window.h b/include/text_window.h
index 9fbc90799..c384ca1bb 100644
--- a/include/text_window.h
+++ b/include/text_window.h
@@ -23,7 +23,7 @@ void sub_8098C6C(u8 bg, u16 destOffset, u8 palOffset);
void sub_814FEAC(u8 windowId, u16 tileStart, u8 palette);
void sub_814FF2C(u8 windowId, u16 tileStart, u8 palette);
void sub_815001C(u8 windowId, u16 tileStart, u8 palette);
-void sub_814FE40(u8 windowId, u16 tileStart, u8 palette);
+void LoadUserWindowBorderGfx(u8 windowId, u16 tileStart, u8 palette);
void sub_814FDA0(u8 windowId, u16 tileStart, u8 palette);
void DrawTextBorderOuter(u8 windowId, u16 tileStart, u8 palette);
diff --git a/include/unk_810c3a4.h b/include/unk_810c3a4.h
index 3f85ab00f..11a91b5ef 100644
--- a/include/unk_810c3a4.h
+++ b/include/unk_810c3a4.h
@@ -1,6 +1,25 @@
#ifndef GUARD_UNK_810C3A4_H
#define GUARD_UNK_810C3A4_H
+#define GET_VS_SEEKER_COUNTER_0() (gSaveBlock1Ptr->trainerRematch.stepCounter & 0xFF)
+#define GET_VS_SEEKER_COUNTER_1() (gSaveBlock1Ptr->trainerRematch.stepCounter >> 8)
+#define SET_VS_SEEKER_COUNTER_0(x) ({\
+ gSaveBlock1Ptr->trainerRematch.stepCounter &= 0xFF00;\
+ gSaveBlock1Ptr->trainerRematch.stepCounter |= (x);\
+})
+#define SET_VS_SEEKER_COUNTER_1(x) ({\
+ gSaveBlock1Ptr->trainerRematch.stepCounter &= 0x00FF;\
+ gSaveBlock1Ptr->trainerRematch.stepCounter |= ((x) << 8);\
+})
+#define INC_VS_SEEKER_COUNTER_0() ({\
+ u8 x = GET_VS_SEEKER_COUNTER_0();\
+ if (x < 100) gSaveBlock1Ptr->trainerRematch.stepCounter++;\
+})
+#define INC_VS_SEEKER_COUNTER_1() ({\
+ u8 x = GET_VS_SEEKER_COUNTER_1();\
+ if (x < 100) {x++; SET_VS_SEEKER_COUNTER_1(x);}\
+})
+
void sub_810C604(void);
void sub_810C640(void);
diff --git a/ld_script.txt b/ld_script.txt
index 6b9452054..9b056bf84 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -82,7 +82,6 @@ SECTIONS {
src/util.o(.text);
src/blend_palette.o(.text);
src/daycare.o(.text);
- asm/egg_hatch.o(.text);
asm/battle_interface.o(.text);
asm/smokescreen.o(.text);
asm/pokeball.o(.text);
@@ -214,7 +213,6 @@ SECTIONS {
asm/save_location.o(.text);
src/bag.o(.text);
src/trainer_pokemon_sprites.o(.text);
- asm/unk_810C3A4.o(.text);
src/vs_seeker.o(.text);
asm/item_pc.o(.text);
asm/mailbox_pc.o(.text);
@@ -248,16 +246,16 @@ SECTIONS {
src/mevent_8145654.o(.text);
src/menews_jisan.o(.text);
src/seagallop.o(.text);
- asm/unk_8147500.o(.text);
- asm/unk_8147AA8.o(.text);
- asm/unk_814B6F0.o(.text);
- asm/unk_814BB4C.o(.text);
- asm/unk_814D5C8.o(.text);
+ asm/pokemon_jump.o(.text);
+ asm/pokemon_jump_2.o(.text);
+ asm/berry_crush.o(.text);
+ asm/berry_crush_2.o(.text);
+ asm/berry_crush_3.o(.text);
asm/wireless_communication_status_screen.o(.text);
asm/braille_text.o(.text);
asm/text_window.o(.text);
src/quest_log_8150454.o(.text);
- asm/unk_81507FC.o(.text);
+ asm/dodrio_berry_picking.o(.text);
asm/battle_controller_pokedude.o(.text);
asm/unk_8159F40.o(.text);
asm/teachy_tv.o(.text);
diff --git a/src/daycare.c b/src/daycare.c
index 208db4a27..66e5c3f32 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -11,7 +11,6 @@
#include "random.h"
#include "main.h"
#include "constants/moves.h"
-#include "egg_hatch.h"
#include "text.h"
#include "menu.h"
#include "new_menu_helpers.h"
@@ -23,10 +22,50 @@
#include "party_menu.h"
#include "list_menu.h"
#include "overworld.h"
+#include "pokedex.h"
+#include "decompress.h"
+#include "task.h"
+#include "palette.h"
+#include "main.h"
+#include "sound.h"
+#include "constants/songs.h"
+#include "text_window.h"
+#include "trig.h"
+#include "malloc.h"
+#include "dma3.h"
+#include "gpu_regs.h"
+#include "bg.h"
+#include "m4a.h"
+#include "graphics.h"
+#include "constants/abilities.h"
+#include "constants/species.h"
+#include "scanline_effect.h"
+#include "field_weather.h"
+#include "naming_screen.h"
+#include "field_screen_effect.h"
+#include "help_system.h"
+#include "field_fadetransition.h"
#define EGG_MOVES_ARRAY_COUNT 10
#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50
+struct EggHatchData
+{
+ u8 eggSpriteID;
+ u8 pokeSpriteID;
+ u8 CB2_state;
+ u8 CB2_PalCounter;
+ u8 eggPartyID;
+ u8 unused_5;
+ u8 unused_6;
+ u8 eggShardVelocityID;
+ u8 windowId;
+ u8 unused_9;
+ u8 unused_A;
+ u16 species;
+ struct TextColor textColor;
+};
+
extern const u8 gText_MaleSymbol4[];
extern const u8 gText_FemaleSymbol4[];
extern const u8 gText_GenderlessSymbol[];
@@ -37,12 +76,33 @@ extern const u8 gDaycareText_DontLikeOther[];
extern const u8 gDaycareText_PlayOther[];
extern const u8 gExpandedPlaceholder_Empty[];
+extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle
+extern const u8 gText_HatchedFromEgg[];
+extern const u8 gText_NickHatchPrompt[];
+
// this file's functions
static void ClearDaycareMonMail(struct DayCareMail *mail);
static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare);
static u8 GetDaycareCompatibilityScore(struct DayCare *daycare);
static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y);
+static void Task_EggHatch(u8 taskID);
+static void CB2_EggHatch_0(void);
+static void CB2_EggHatch_1(void);
+static void SpriteCB_Egg_0(struct Sprite* sprite);
+static void SpriteCB_Egg_1(struct Sprite* sprite);
+static void SpriteCB_Egg_2(struct Sprite* sprite);
+static void SpriteCB_Egg_3(struct Sprite* sprite);
+static void SpriteCB_Egg_4(struct Sprite* sprite);
+static void SpriteCB_Egg_5(struct Sprite* sprite);
+static void SpriteCB_EggShard(struct Sprite* sprite);
+static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed);
+static void CreateRandomEggShardSprite(void);
+static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex);
+
+// IWRAM bss
+static IWRAM_DATA struct EggHatchData *sEggHatchData;
+
// RAM buffers used to assist with BuildEggMoveset()
EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0};
EWRAM_DATA static u16 sHatchedEggFatherMoves[4] = {0};
@@ -103,8 +163,222 @@ static const u8 *const sCompatibilityMessages[] =
static const u8 sNewLineText[] = _("\n");
static const u8 sJapaneseEggNickname[] = _("タマゴ"); // "tamago" ("egg" in Japanese)
-// ???
-const u8 sGarbageData[] = {0xF4, 0x4B};
+static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/palettes/egg_palette.gbapal");
+static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/misc/egg_hatch.4bpp");
+static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp");
+
+static const struct OamData sOamData_EggHatch =
+ {
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(32x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x32),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+ };
+
+static const union AnimCmd sSpriteAnim_EggHatch0[] =
+ {
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd sSpriteAnim_EggHatch1[] =
+ {
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd sSpriteAnim_EggHatch2[] =
+ {
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd sSpriteAnim_EggHatch3[] =
+ {
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd *const sSpriteAnimTable_EggHatch[] =
+ {
+ sSpriteAnim_EggHatch0,
+ sSpriteAnim_EggHatch1,
+ sSpriteAnim_EggHatch2,
+ sSpriteAnim_EggHatch3,
+ };
+
+static const struct SpriteSheet sEggHatch_Sheet =
+ {
+ .data = sEggHatchTiles,
+ .size = 2048,
+ .tag = 12345,
+ };
+
+static const struct SpriteSheet sEggShards_Sheet =
+ {
+ .data = sEggShardTiles,
+ .size = 128,
+ .tag = 23456,
+ };
+
+static const struct SpritePalette sEgg_SpritePalette =
+ {
+ .data = sEggPalette,
+ .tag = 54321
+ };
+
+static const struct SpriteTemplate sSpriteTemplate_EggHatch =
+ {
+ .tileTag = 12345,
+ .paletteTag = 54321,
+ .oam = &sOamData_EggHatch,
+ .anims = sSpriteAnimTable_EggHatch,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+ };
+
+static const struct OamData sOamData_EggShard =
+ {
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(8x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x8),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+ };
+
+static const union AnimCmd sSpriteAnim_EggShard0[] =
+ {
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd sSpriteAnim_EggShard1[] =
+ {
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd sSpriteAnim_EggShard2[] =
+ {
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd sSpriteAnim_EggShard3[] =
+ {
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd *const sSpriteAnimTable_EggShard[] =
+ {
+ sSpriteAnim_EggShard0,
+ sSpriteAnim_EggShard1,
+ sSpriteAnim_EggShard2,
+ sSpriteAnim_EggShard3,
+ };
+
+static const struct SpriteTemplate sSpriteTemplate_EggShard =
+ {
+ .tileTag = 23456,
+ .paletteTag = 54321,
+ .oam = &sOamData_EggShard,
+ .anims = sSpriteAnimTable_EggShard,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_EggShard
+ };
+
+static const struct BgTemplate sBgTemplates_EggHatch[2] =
+ {
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 24,
+ .screenSize = 3,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 8,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ };
+
+static const struct WindowTemplate sWinTemplates_EggHatch[2] =
+ {
+ {
+ .priority = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 15,
+ .width = 26,
+ .height = 4,
+ .paletteNum = 0,
+ .baseBlock = 64
+ },
+ DUMMY_WIN_TEMPLATE
+ };
+
+static const struct WindowTemplate sYesNoWinTemplate =
+ {
+ .priority = 0,
+ .tilemapLeft = 21,
+ .tilemapTop = 9,
+ .width = 6,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 424
+ };
+
+static const s16 sEggShardVelocities[][2] =
+ {
+ {Q_8_8(-1.5), Q_8_8(-3.75)},
+ {Q_8_8(-5), Q_8_8(-3)},
+ {Q_8_8(3.5), Q_8_8(-3)},
+ {Q_8_8(-4), Q_8_8(-3.75)},
+ {Q_8_8(2), Q_8_8(-1.5)},
+ {Q_8_8(-0.5), Q_8_8(-6.75)},
+ {Q_8_8(5), Q_8_8(-2.25)},
+ {Q_8_8(-1.5), Q_8_8(-3.75)},
+ {Q_8_8(4.5), Q_8_8(-1.5)},
+ {Q_8_8(-1), Q_8_8(-6.75)},
+ {Q_8_8(4), Q_8_8(-2.25)},
+ {Q_8_8(-3.5), Q_8_8(-3.75)},
+ {Q_8_8(1), Q_8_8(-1.5)},
+ {Q_8_8(-3.515625), Q_8_8(-6.75)},
+ {Q_8_8(4.5), Q_8_8(-2.25)},
+ {Q_8_8(-0.5), Q_8_8(-7.5)},
+ {Q_8_8(1), Q_8_8(-4.5)},
+ {Q_8_8(-2.5), Q_8_8(-2.25)},
+ {Q_8_8(2.5), Q_8_8(-7.5)},
+ };
+
+// code
u8 *GetMonNick(struct Pokemon *mon, u8 *dest)
{
@@ -1317,7 +1591,7 @@ void ShowDaycareLevelMenu(void)
void ChooseSendDaycareMon(void)
{
sub_8128370();
- gMain.savedCallback = c2_exit_to_overworld_2_switch;
+ gMain.savedCallback = CB2_ReturnToField;
}
// Route 5 Daycare
@@ -1351,3 +1625,585 @@ u16 TakePokemonFromRoute5Daycare(void)
{
return TakeSelectedPokemonFromDaycare(&gSaveBlock1Ptr->route5DayCareMon);
}
+
+static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
+{
+ u16 species;
+ u32 personality, pokerus;
+ u8 i, friendship, language, gameMet, markings, obedience;
+ u16 moves[4];
+ u32 ivs[NUM_STATS];
+
+
+ species = GetMonData(egg, MON_DATA_SPECIES);
+
+ for (i = 0; i < 4; i++)
+ {
+ moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i);
+ }
+
+ personality = GetMonData(egg, MON_DATA_PERSONALITY);
+
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i);
+ }
+
+// language = GetMonData(egg, MON_DATA_LANGUAGE);
+ gameMet = GetMonData(egg, MON_DATA_MET_GAME);
+ markings = GetMonData(egg, MON_DATA_MARKINGS);
+ pokerus = GetMonData(egg, MON_DATA_POKERUS);
+ obedience = GetMonData(egg, MON_DATA_OBEDIENCE);
+
+ CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, 0, 0);
+
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(temp, MON_DATA_MOVE1 + i, &moves[i]);
+ }
+
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ SetMonData(temp, MON_DATA_HP_IV + i, &ivs[i]);
+ }
+
+ language = GAME_LANGUAGE;
+ SetMonData(temp, MON_DATA_LANGUAGE, &language);
+ SetMonData(temp, MON_DATA_MET_GAME, &gameMet);
+ SetMonData(temp, MON_DATA_MARKINGS, &markings);
+
+ friendship = 120;
+ SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship);
+ SetMonData(temp, MON_DATA_POKERUS, &pokerus);
+ SetMonData(temp, MON_DATA_OBEDIENCE, &obedience);
+
+ *egg = *temp;
+}
+
+static void AddHatchedMonToParty(u8 id)
+{
+ u8 isEgg = 0x46; // ?
+ u16 pokeNum;
+ u8 name[12];
+ u16 ball;
+ u16 caughtLvl;
+ u8 mapNameID;
+ struct Pokemon* mon = &gPlayerParty[id];
+
+ CreatedHatchedMon(mon, &gEnemyParty[0]);
+ SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
+
+ pokeNum = GetMonData(mon, MON_DATA_SPECIES);
+ GetSpeciesName(name, pokeNum);
+ SetMonData(mon, MON_DATA_NICKNAME, name);
+
+ pokeNum = SpeciesToNationalPokedexNum(pokeNum);
+ GetSetPokedexFlag(pokeNum, FLAG_SET_SEEN);
+ GetSetPokedexFlag(pokeNum, FLAG_SET_CAUGHT);
+
+ GetMonNick(mon, gStringVar1);
+
+ ball = ITEM_POKE_BALL;
+ SetMonData(mon, MON_DATA_POKEBALL, &ball);
+
+ caughtLvl = 0;
+ SetMonData(mon, MON_DATA_MET_LEVEL, &caughtLvl);
+
+ mapNameID = GetCurrentRegionMapSectionId();
+ SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID);
+
+ MonRestorePP(mon);
+ CalculateMonStats(mon);
+}
+
+void ScriptHatchMon(void)
+{
+ AddHatchedMonToParty(gSpecialVar_0x8004);
+}
+
+static bool8 sub_8046E34(struct DayCare *daycare, u8 daycareId)
+{
+ u8 nick[0x20];
+ struct DaycareMon *daycareMon = &daycare->mons[daycareId];
+
+ GetBoxMonNick(&daycareMon->mon, nick);
+ if (daycareMon->mail.message.itemId != 0
+ && (StringCompare(nick, daycareMon->mail.monName) != 0
+ || StringCompare(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0))
+ {
+ StringCopy(gStringVar1, nick);
+ StringCopy(gStringVar2, daycareMon->mail.OT_name);
+ StringCopy(gStringVar3, daycareMon->mail.monName);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_8046EAC(void)
+{
+ return sub_8046E34(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
+}
+
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+
+static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc)
+{
+ u8 r4 = 0;
+ u8 spriteID = 0; // r7
+ struct Pokemon* mon = NULL; // r5
+
+ if (a0 == 0)
+ {
+ mon = &gPlayerParty[pokeID];
+ r4 = 1;
+ }
+ if (a0 == 1)
+ {
+ mon = &gPlayerParty[pokeID];
+ r4 = 3;
+ }
+ switch (switchID)
+ {
+ case 0:
+ {
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u32 pid = GetMonData(mon, MON_DATA_PERSONALITY);
+ sub_800ECC4(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[(a0 * 2) + 1], species, pid);
+ LoadCompressedObjectPalette(GetMonSpritePalStruct(mon));
+ *speciesLoc = species;
+ }
+ break;
+ case 1:
+ SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, r4);
+ spriteID = CreateSprite(&gMultiuseSpriteTemplate, 120, 70, 6);
+ gSprites[spriteID].invisible = TRUE;
+ gSprites[spriteID].callback = SpriteCallbackDummy;
+ break;
+ }
+ return spriteID;
+}
+
+static void VBlankCB_EggHatch(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void EggHatch(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(Task_EggHatch, 10);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ sub_812B478();
+}
+
+static void Task_EggHatch(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ CleanupOverworldWindowsAndTilemaps();
+ SetMainCallback2(CB2_EggHatch_0);
+ gFieldCallback = FieldCallback_ReturnToEventScript2;
+ DestroyTask(taskID);
+ }
+}
+
+static void CB2_EggHatch_0(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+
+ sEggHatchData = Alloc(sizeof(struct EggHatchData));
+ AllocateMonSpritesGfx();
+ sEggHatchData->eggPartyID = gSpecialVar_0x8004;
+ sEggHatchData->eggShardVelocityID = 0;
+
+ SetVBlankCallback(VBlankCB_EggHatch);
+ gSpecialVar_0x8005 = GetCurrentMapMusic();
+
+ reset_temp_tile_data_buffers();
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sBgTemplates_EggHatch, ARRAY_COUNT(sBgTemplates_EggHatch));
+
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+
+ SetBgAttribute(1, 7, 2);
+ SetBgTilemapBuffer(1, Alloc(0x1000));
+ SetBgTilemapBuffer(0, Alloc(0x2000));
+
+ DeactivateAllTextPrinters();
+ ResetPaletteFade();
+ FreeAllSpritePalettes();
+ ResetSpriteData();
+ ResetTasks();
+ ScanlineEffect_Stop();
+ m4aSoundVSyncOn();
+ gMain.state++;
+ break;
+ case 1:
+ InitWindows(sWinTemplates_EggHatch);
+ sEggHatchData->windowId = 0;
+ gMain.state++;
+ break;
+ case 2:
+ DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0);
+ CopyToBgTilemapBuffer(0, gFile_graphics_interface_menu_map_tilemap, 0, 0);
+ LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20);
+ gMain.state++;
+ break;
+ case 3:
+ LoadSpriteSheet(&sEggHatch_Sheet);
+ LoadSpriteSheet(&sEggShards_Sheet);
+ LoadSpritePalette(&sEgg_SpritePalette);
+ gMain.state++;
+ break;
+ case 4:
+ CopyBgTilemapBufferToVram(0);
+ AddHatchedMonToParty(sEggHatchData->eggPartyID);
+ gMain.state++;
+ break;
+ case 5:
+ EggHatchCreateMonSprite(0, 0, sEggHatchData->eggPartyID, &sEggHatchData->species);
+ gMain.state++;
+ break;
+ case 6:
+ sEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, sEggHatchData->eggPartyID, &sEggHatchData->species);
+ gMain.state++;
+ break;
+ case 7:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ LoadPalette(gTradeGba2_Pal, 0x10, 0xA0);
+ LoadBgTiles(1, gTradeGba_Gfx, 0x1420, 0);
+ CopyToBgTilemapBuffer(1, gUnknown_08331F60, 0x1000, 0);
+ CopyBgTilemapBufferToVram(1);
+ gMain.state++;
+ break;
+ case 8:
+ SetMainCallback2(CB2_EggHatch_1);
+ sEggHatchData->CB2_state = 0;
+ break;
+ }
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void EggHatchSetMonNickname(void)
+{
+ SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3);
+ FreeMonSpritesGfx();
+ Free(sEggHatchData);
+ sub_812B484();
+ SetMainCallback2(CB2_ReturnToField);
+}
+
+static void Task_EggHatchPlayBGM(u8 taskID)
+{
+ if (gTasks[taskID].data[0] == 0)
+ {
+ StopMapMusic();
+ }
+ if (gTasks[taskID].data[0] == 1)
+ PlayBGM(MUS_ME_SHINKA);
+ if (gTasks[taskID].data[0] > 60)
+ {
+ PlayBGM(MUS_SHINKA);
+ DestroyTask(taskID);
+ // UB: task is destroyed, yet the value is incremented
+ }
+ gTasks[taskID].data[0]++;
+}
+
+static void CB2_EggHatch_1(void)
+{
+ u16 species;
+ u8 gender;
+ u32 personality;
+
+ switch (sEggHatchData->CB2_state)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ sEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_EggHatch, 120, 75, 5);
+ ShowBg(0);
+ ShowBg(1);
+ sEggHatchData->CB2_state++;
+ CreateTask(Task_EggHatchPlayBGM, 5);
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ FillWindowPixelBuffer(sEggHatchData->windowId, 0x00);
+ sEggHatchData->CB2_PalCounter = 0;
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 2:
+ if (++sEggHatchData->CB2_PalCounter > 30)
+ {
+ sEggHatchData->CB2_state++;
+ gSprites[sEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0;
+ }
+ break;
+ case 3:
+ if (gSprites[sEggHatchData->eggSpriteID].callback == SpriteCallbackDummy)
+ {
+ PlayCry1(sEggHatchData->species, 0);
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 4:
+ if (IsCryFinished())
+ {
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 5:
+ GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg);
+ EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF);
+ PlayFanfare(MUS_FANFA5);
+ sEggHatchData->CB2_state++;
+ PutWindowTilemap(sEggHatchData->windowId);
+ CopyWindowToVram(sEggHatchData->windowId, 3);
+ break;
+ case 6:
+ if (IsFanfareTaskInactive())
+ sEggHatchData->CB2_state++;
+ break;
+ case 7:
+ if (IsFanfareTaskInactive())
+ sEggHatchData->CB2_state++;
+ break;
+ case 8:
+ GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_NickHatchPrompt);
+ EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 2, 1);
+ sEggHatchData->CB2_state++;
+ break;
+ case 9:
+ if (!IsTextPrinterActive(sEggHatchData->windowId))
+ {
+ LoadUserWindowBorderGfx(sEggHatchData->windowId, 0x140, 0xE0);
+ CreateYesNoMenu(&sYesNoWinTemplate, 3, 0, 2, 0x140, 0xE, 0);
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 10:
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3);
+ species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
+ gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]);
+ personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0);
+ DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
+ break;
+ case 1:
+ case -1:
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 11:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ sEggHatchData->CB2_state++;
+ break;
+ case 12:
+ if (!gPaletteFade.active)
+ {
+ RemoveWindow(sEggHatchData->windowId);
+ UnsetBgTilemapBuffer(0);
+ UnsetBgTilemapBuffer(1);
+ Free(sEggHatchData);
+ SetMainCallback2(CB2_ReturnToField);
+ sub_812B484();
+ }
+ break;
+ }
+
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void SpriteCB_Egg_0(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 20)
+ {
+ sprite->callback = SpriteCB_Egg_1;
+ sprite->data[0] = 0;
+ }
+ else
+ {
+ sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 1);
+ if (sprite->data[0] == 15)
+ {
+ PlaySE(SE_BOWA);
+ StartSpriteAnim(sprite, 1);
+ CreateRandomEggShardSprite();
+ }
+ }
+}
+
+static void SpriteCB_Egg_1(struct Sprite* sprite)
+{
+ if (++sprite->data[2] > 30)
+ {
+ if (++sprite->data[0] > 20)
+ {
+ sprite->callback = SpriteCB_Egg_2;
+ sprite->data[0] = 0;
+ sprite->data[2] = 0;
+ }
+ else
+ {
+ sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 2);
+ if (sprite->data[0] == 15)
+ {
+ PlaySE(SE_BOWA);
+ StartSpriteAnim(sprite, 2);
+ }
+ }
+ }
+}
+
+struct UnkStruct_82349CC
+{
+ u8 field_0;
+ u8 field_1;
+ u8 field_2;
+ u8 field_3;
+};
+
+extern const struct UnkStruct_82349CC gUnknown_82349CC[NUM_SPECIES];
+
+static void SpriteCB_Egg_2(struct Sprite* sprite)
+{
+ if (++sprite->data[2] > 30)
+ {
+ if (++sprite->data[0] > 38)
+ {
+ u16 species;
+
+ sprite->callback = SpriteCB_Egg_3;
+ sprite->data[0] = 0;
+ species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
+ gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0;
+ gSprites[sEggHatchData->pokeSpriteID].pos2.y = gUnknown_82349CC[species].field_1;
+ }
+ else
+ {
+ sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 2);
+ if (sprite->data[0] == 15)
+ {
+ PlaySE(SE_BOWA);
+ StartSpriteAnim(sprite, 2);
+ CreateRandomEggShardSprite();
+ CreateRandomEggShardSprite();
+ }
+ if (sprite->data[0] == 30)
+ PlaySE(SE_BOWA);
+ }
+ }
+}
+
+static void SpriteCB_Egg_3(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 50)
+ {
+ sprite->callback = SpriteCB_Egg_4;
+ sprite->data[0] = 0;
+ }
+}
+
+static void SpriteCB_Egg_4(struct Sprite* sprite)
+{
+ s16 i;
+ if (sprite->data[0] == 0)
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 0x10, 0xFFFF);
+ if (sprite->data[0] < 4u)
+ {
+ for (i = 0; i <= 3; i++)
+ CreateRandomEggShardSprite();
+ }
+ sprite->data[0]++;
+ if (!gPaletteFade.active)
+ {
+ PlaySE(SE_JIHANKI);
+ sprite->invisible = TRUE;
+ sprite->callback = SpriteCB_Egg_5;
+ sprite->data[0] = 0;
+ }
+}
+
+static void SpriteCB_Egg_5(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ gSprites[sEggHatchData->pokeSpriteID].invisible = FALSE;
+ StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], 1);
+ }
+ if (sprite->data[0] == 8)
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0x10, 0, 0xFFFF);
+ if (sprite->data[0] <= 9)
+ gSprites[sEggHatchData->pokeSpriteID].pos1.y -= 1;
+ if (sprite->data[0] > 40)
+ sprite->callback = SpriteCallbackDummy;
+ sprite->data[0]++;
+}
+
+static void SpriteCB_EggShard(struct Sprite* sprite)
+{
+ sprite->data[4] += sprite->data[1];
+ sprite->data[5] += sprite->data[2];
+
+ sprite->pos2.x = sprite->data[4] / 256;
+ sprite->pos2.y = sprite->data[5] / 256;
+
+ sprite->data[2] += sprite->data[3];
+
+ if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data[2] > 0)
+ DestroySprite(sprite);
+}
+
+static void CreateRandomEggShardSprite(void)
+{
+ u16 spriteAnimIndex;
+
+ s16 velocity1 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][0];
+ s16 velocity2 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][1];
+ sEggHatchData->eggShardVelocityID++;
+ spriteAnimIndex = Random() % 4;
+ CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex);
+}
+
+static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex)
+{
+ u8 spriteID = CreateSprite(&sSpriteTemplate_EggShard, x, y, 4);
+ gSprites[spriteID].data[1] = data1;
+ gSprites[spriteID].data[2] = data2;
+ gSprites[spriteID].data[3] = data3;
+ StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex);
+}
+
+static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed)
+{
+ FillWindowPixelBuffer(windowId, 0xFF);
+ sEggHatchData->textColor.fgColor = 0;
+ sEggHatchData->textColor.bgColor = 5;
+ sEggHatchData->textColor.shadowColor = 6;
+ AddTextPrinterParametrized2(windowId, 3, x, y, 1, 1, &sEggHatchData->textColor, speed, string);
+}
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
new file mode 100644
index 000000000..59d61c569
--- /dev/null
+++ b/src/egg_hatch.c
@@ -0,0 +1,1758 @@
+#include "global.h"
+#include "pokemon.h"
+#include "egg_hatch.h"
+#include "pokedex.h"
+#include "constants/items.h"
+#include "script.h"
+#include "decompress.h"
+#include "task.h"
+#include "palette.h"
+#include "main.h"
+#include "event_data.h"
+#include "sound.h"
+#include "constants/songs.h"
+#include "text.h"
+#include "text_window.h"
+#include "string_util.h"
+#include "menu.h"
+#include "trig.h"
+#include "random.h"
+#include "malloc.h"
+#include "dma3.h"
+#include "gpu_regs.h"
+#include "bg.h"
+#include "m4a.h"
+#include "window.h"
+#include "graphics.h"
+#include "constants/abilities.h"
+#include "constants/species.h"
+#include "daycare.h"
+#include "overworld.h"
+#include "scanline_effect.h"
+#include "field_weather.h"
+#include "international_string_util.h"
+#include "naming_screen.h"
+#include "pokemon_storage_system.h"
+#include "field_screen_effect.h"
+#include "battle.h" // to get rid of later
+#include "help_system.h"
+#include "field_fadetransition.h"
+#include "new_menu_helpers.h"
+/*
+
+struct EggHatchData
+{
+ u8 eggSpriteID;
+ u8 pokeSpriteID;
+ u8 CB2_state;
+ u8 CB2_PalCounter;
+ u8 eggPartyID;
+ u8 unused_5;
+ u8 unused_6;
+ u8 eggShardVelocityID;
+ u8 windowId;
+ u8 unused_9;
+ u8 unused_A;
+ u16 species;
+ struct TextColor textColor;
+};
+
+extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle
+extern const u8 gText_HatchedFromEgg[];
+extern const u8 gText_NickHatchPrompt[];
+
+static void Task_EggHatch(u8 taskID);
+static void CB2_EggHatch_0(void);
+static void CB2_EggHatch_1(void);
+static void SpriteCB_Egg_0(struct Sprite* sprite);
+static void SpriteCB_Egg_1(struct Sprite* sprite);
+static void SpriteCB_Egg_2(struct Sprite* sprite);
+static void SpriteCB_Egg_3(struct Sprite* sprite);
+static void SpriteCB_Egg_4(struct Sprite* sprite);
+static void SpriteCB_Egg_5(struct Sprite* sprite);
+static void SpriteCB_EggShard(struct Sprite* sprite);
+static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed);
+static void CreateRandomEggShardSprite(void);
+static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex);
+
+// IWRAM bss
+static IWRAM_DATA struct EggHatchData *sEggHatchData;
+
+// rom data
+static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/palettes/egg_palette.gbapal");
+static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/misc/egg_hatch.4bpp");
+static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp");
+
+static const struct OamData sOamData_EggHatch =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(32x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x32),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_EggHatch0[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_EggHatch1[] =
+{
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_EggHatch2[] =
+{
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_EggHatch3[] =
+{
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_EggHatch[] =
+{
+ sSpriteAnim_EggHatch0,
+ sSpriteAnim_EggHatch1,
+ sSpriteAnim_EggHatch2,
+ sSpriteAnim_EggHatch3,
+};
+
+static const struct SpriteSheet sEggHatch_Sheet =
+{
+ .data = sEggHatchTiles,
+ .size = 2048,
+ .tag = 12345,
+};
+
+static const struct SpriteSheet sEggShards_Sheet =
+{
+ .data = sEggShardTiles,
+ .size = 128,
+ .tag = 23456,
+};
+
+static const struct SpritePalette sEgg_SpritePalette =
+{
+ .data = sEggPalette,
+ .tag = 54321
+};
+
+static const struct SpriteTemplate sSpriteTemplate_EggHatch =
+{
+ .tileTag = 12345,
+ .paletteTag = 54321,
+ .oam = &sOamData_EggHatch,
+ .anims = sSpriteAnimTable_EggHatch,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct OamData sOamData_EggShard =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(8x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x8),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_EggShard0[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_EggShard1[] =
+{
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_EggShard2[] =
+{
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_EggShard3[] =
+{
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_EggShard[] =
+{
+ sSpriteAnim_EggShard0,
+ sSpriteAnim_EggShard1,
+ sSpriteAnim_EggShard2,
+ sSpriteAnim_EggShard3,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_EggShard =
+{
+ .tileTag = 23456,
+ .paletteTag = 54321,
+ .oam = &sOamData_EggShard,
+ .anims = sSpriteAnimTable_EggShard,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_EggShard
+};
+
+static const struct BgTemplate sBgTemplates_EggHatch[2] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 24,
+ .screenSize = 3,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 8,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+};
+
+static const struct WindowTemplate sWinTemplates_EggHatch[2] =
+{
+ {
+ .priority = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 15,
+ .width = 26,
+ .height = 4,
+ .paletteNum = 0,
+ .baseBlock = 64
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate sYesNoWinTemplate =
+{
+ .priority = 0,
+ .tilemapLeft = 21,
+ .tilemapTop = 9,
+ .width = 5,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 424
+};
+
+static const s16 sEggShardVelocities[][2] =
+{
+ {Q_8_8(-1.5), Q_8_8(-3.75)},
+ {Q_8_8(-5), Q_8_8(-3)},
+ {Q_8_8(3.5), Q_8_8(-3)},
+ {Q_8_8(-4), Q_8_8(-3.75)},
+ {Q_8_8(2), Q_8_8(-1.5)},
+ {Q_8_8(-0.5), Q_8_8(-6.75)},
+ {Q_8_8(5), Q_8_8(-2.25)},
+ {Q_8_8(-1.5), Q_8_8(-3.75)},
+ {Q_8_8(4.5), Q_8_8(-1.5)},
+ {Q_8_8(-1), Q_8_8(-6.75)},
+ {Q_8_8(4), Q_8_8(-2.25)},
+ {Q_8_8(-3.5), Q_8_8(-3.75)},
+ {Q_8_8(1), Q_8_8(-1.5)},
+ {Q_8_8(-3.515625), Q_8_8(-6.75)},
+ {Q_8_8(4.5), Q_8_8(-2.25)},
+ {Q_8_8(-0.5), Q_8_8(-7.5)},
+ {Q_8_8(1), Q_8_8(-4.5)},
+ {Q_8_8(-2.5), Q_8_8(-2.25)},
+ {Q_8_8(2.5), Q_8_8(-7.5)},
+};
+
+// code
+
+static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
+{
+ u16 species;
+ u32 personality, pokerus;
+ u8 i, friendship, language, gameMet, markings, obedience;
+ u16 moves[4];
+ u32 ivs[NUM_STATS];
+
+
+ species = GetMonData(egg, MON_DATA_SPECIES);
+
+ for (i = 0; i < 4; i++)
+ {
+ moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i);
+ }
+
+ personality = GetMonData(egg, MON_DATA_PERSONALITY);
+
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i);
+ }
+
+// language = GetMonData(egg, MON_DATA_LANGUAGE);
+ gameMet = GetMonData(egg, MON_DATA_MET_GAME);
+ markings = GetMonData(egg, MON_DATA_MARKINGS);
+ pokerus = GetMonData(egg, MON_DATA_POKERUS);
+ obedience = GetMonData(egg, MON_DATA_OBEDIENCE);
+
+ CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, 0, 0);
+
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(temp, MON_DATA_MOVE1 + i, &moves[i]);
+ }
+
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ SetMonData(temp, MON_DATA_HP_IV + i, &ivs[i]);
+ }
+
+ language = GAME_LANGUAGE;
+ SetMonData(temp, MON_DATA_LANGUAGE, &language);
+ SetMonData(temp, MON_DATA_MET_GAME, &gameMet);
+ SetMonData(temp, MON_DATA_MARKINGS, &markings);
+
+ friendship = 120;
+ SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship);
+ SetMonData(temp, MON_DATA_POKERUS, &pokerus);
+ SetMonData(temp, MON_DATA_OBEDIENCE, &obedience);
+
+ *egg = *temp;
+}
+
+static void AddHatchedMonToParty(u8 id)
+{
+ u8 isEgg = 0x46; // ?
+ u16 pokeNum;
+ u8 name[12];
+ u16 ball;
+ u16 caughtLvl;
+ u8 mapNameID;
+ struct Pokemon* mon = &gPlayerParty[id];
+
+ CreatedHatchedMon(mon, &gEnemyParty[0]);
+ SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
+
+ pokeNum = GetMonData(mon, MON_DATA_SPECIES);
+ GetSpeciesName(name, pokeNum);
+ SetMonData(mon, MON_DATA_NICKNAME, name);
+
+ pokeNum = SpeciesToNationalPokedexNum(pokeNum);
+ GetSetPokedexFlag(pokeNum, FLAG_SET_SEEN);
+ GetSetPokedexFlag(pokeNum, FLAG_SET_CAUGHT);
+
+ GetMonNick(mon, gStringVar1);
+
+ ball = ITEM_POKE_BALL;
+ SetMonData(mon, MON_DATA_POKEBALL, &ball);
+
+ caughtLvl = 0;
+ SetMonData(mon, MON_DATA_MET_LEVEL, &caughtLvl);
+
+ mapNameID = GetCurrentRegionMapSectionId();
+ SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID);
+
+ MonRestorePP(mon);
+ CalculateMonStats(mon);
+}
+
+void ScriptHatchMon(void)
+{
+ AddHatchedMonToParty(gSpecialVar_0x8004);
+}
+
+static bool8 sub_8046E34(struct DayCare *daycare, u8 daycareId)
+{
+ u8 nick[0x20];
+ struct DaycareMon *daycareMon = &daycare->mons[daycareId];
+
+ GetBoxMonNick(&daycareMon->mon, nick);
+ if (daycareMon->mail.message.itemId != 0
+ && (StringCompare(nick, daycareMon->mail.monName) != 0
+ || StringCompare(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0))
+ {
+ StringCopy(gStringVar1, nick);
+ StringCopy(gStringVar2, daycareMon->mail.OT_name);
+ StringCopy(gStringVar3, daycareMon->mail.monName);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_8046EAC(void)
+{
+ return sub_8046E34(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
+}
+
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+
+static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc)
+{
+ u8 r4 = 0;
+ u8 spriteID = 0; // r7
+ struct Pokemon* mon = NULL; // r5
+
+ if (a0 == 0)
+ {
+ mon = &gPlayerParty[pokeID];
+ r4 = 1;
+ }
+ if (a0 == 1)
+ {
+ mon = &gPlayerParty[pokeID];
+ r4 = 3;
+ }
+ switch (switchID)
+ {
+ case 0:
+ {
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u32 pid = GetMonData(mon, MON_DATA_PERSONALITY);
+ sub_800ECC4(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[(a0 * 2) + 1], species, pid);
+ LoadCompressedObjectPalette(GetMonSpritePalStruct(mon));
+ *speciesLoc = species;
+ }
+ break;
+ case 1:
+ SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, r4);
+ spriteID = CreateSprite(&gMultiuseSpriteTemplate, 120, 70, 6);
+ gSprites[spriteID].invisible = TRUE;
+ gSprites[spriteID].callback = SpriteCallbackDummy;
+ break;
+ }
+ return spriteID;
+}
+
+static void VBlankCB_EggHatch(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void EggHatch(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(Task_EggHatch, 10);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ sub_812B478();
+}
+
+static void Task_EggHatch(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ CleanupOverworldWindowsAndTilemaps();
+ SetMainCallback2(CB2_EggHatch_0);
+ gFieldCallback = FieldCallback_ReturnToEventScript2;
+ DestroyTask(taskID);
+ }
+}
+
+static void CB2_EggHatch_0(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+
+ sEggHatchData = Alloc(sizeof(struct EggHatchData));
+ AllocateMonSpritesGfx();
+ sEggHatchData->eggPartyID = gSpecialVar_0x8004;
+ sEggHatchData->eggShardVelocityID = 0;
+
+ SetVBlankCallback(VBlankCB_EggHatch);
+ gSpecialVar_0x8005 = GetCurrentMapMusic();
+
+ reset_temp_tile_data_buffers();
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sBgTemplates_EggHatch, ARRAY_COUNT(sBgTemplates_EggHatch));
+
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+
+ SetBgAttribute(1, 7, 2);
+ SetBgTilemapBuffer(1, Alloc(0x1000));
+ SetBgTilemapBuffer(0, Alloc(0x2000));
+
+ DeactivateAllTextPrinters();
+ ResetPaletteFade();
+ FreeAllSpritePalettes();
+ ResetSpriteData();
+ ResetTasks();
+ ScanlineEffect_Stop();
+ m4aSoundVSyncOn();
+ gMain.state++;
+ break;
+ case 1:
+ InitWindows(sWinTemplates_EggHatch);
+ sEggHatchData->windowId = 0;
+ gMain.state++;
+ break;
+ case 2:
+ DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0);
+ CopyToBgTilemapBuffer(0, gFile_graphics_interface_menu_map_tilemap, 0, 0);
+ LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20);
+ gMain.state++;
+ break;
+ case 3:
+ LoadSpriteSheet(&sEggHatch_Sheet);
+ LoadSpriteSheet(&sEggShards_Sheet);
+ LoadSpritePalette(&sEgg_SpritePalette);
+ gMain.state++;
+ break;
+ case 4:
+ CopyBgTilemapBufferToVram(0);
+ AddHatchedMonToParty(sEggHatchData->eggPartyID);
+ gMain.state++;
+ break;
+ case 5:
+ EggHatchCreateMonSprite(0, 0, sEggHatchData->eggPartyID, &sEggHatchData->species);
+ gMain.state++;
+ break;
+ case 6:
+ sEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, sEggHatchData->eggPartyID, &sEggHatchData->species);
+ gMain.state++;
+ break;
+ case 7:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ LoadPalette(gTradeGba2_Pal, 0x10, 0xA0);
+ LoadBgTiles(1, gTradeGba_Gfx, 0x1420, 0);
+ CopyToBgTilemapBuffer(1, gUnknown_08331F60, 0x1000, 0);
+ CopyBgTilemapBufferToVram(1);
+ gMain.state++;
+ break;
+ case 8:
+ SetMainCallback2(CB2_EggHatch_1);
+ sEggHatchData->CB2_state = 0;
+ break;
+ }
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void EggHatchSetMonNickname(void)
+{
+ SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3);
+ FreeMonSpritesGfx();
+ Free(sEggHatchData);
+ sub_812B484();
+ SetMainCallback2(CB2_ReturnToField);
+}
+
+static void Task_EggHatchPlayBGM(u8 taskID)
+{
+ if (gTasks[taskID].data[0] == 0)
+ {
+ StopMapMusic();
+ }
+ if (gTasks[taskID].data[0] == 1)
+ PlayBGM(MUS_ME_SHINKA);
+ if (gTasks[taskID].data[0] > 60)
+ {
+ PlayBGM(MUS_SHINKA);
+ DestroyTask(taskID);
+ // UB: task is destroyed, yet the value is incremented
+ }
+ gTasks[taskID].data[0]++;
+}
+
+static void CB2_EggHatch_1(void)
+{
+ u16 species;
+ u8 gender;
+ u32 personality;
+
+ switch (sEggHatchData->CB2_state)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ sEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_EggHatch, 120, 75, 5);
+ ShowBg(0);
+ ShowBg(1);
+ sEggHatchData->CB2_state++;
+ CreateTask(Task_EggHatchPlayBGM, 5);
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ FillWindowPixelBuffer(sEggHatchData->windowId, 0x00);
+ sEggHatchData->CB2_PalCounter = 0;
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 2:
+ if (++sEggHatchData->CB2_PalCounter > 30)
+ {
+ sEggHatchData->CB2_state++;
+ gSprites[sEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0;
+ }
+ break;
+ case 3:
+ if (gSprites[sEggHatchData->eggSpriteID].callback == SpriteCallbackDummy)
+ {
+ PlayCry1(sEggHatchData->species, 0);
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 4:
+ if (IsCryFinished())
+ {
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 5:
+ GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg);
+ EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF);
+ PlayFanfare(MUS_FANFA5);
+ sEggHatchData->CB2_state++;
+ PutWindowTilemap(sEggHatchData->windowId);
+ CopyWindowToVram(sEggHatchData->windowId, 3);
+ break;
+ case 6:
+ if (IsFanfareTaskInactive())
+ sEggHatchData->CB2_state++;
+ break;
+ case 7:
+ if (IsFanfareTaskInactive())
+ sEggHatchData->CB2_state++;
+ break;
+ case 8:
+ GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_NickHatchPrompt);
+ EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 2, 1);
+ sEggHatchData->CB2_state++;
+ break;
+ case 9:
+ if (!IsTextPrinterActive(sEggHatchData->windowId))
+ {
+ LoadUserWindowBorderGfx(sEggHatchData->windowId, 0x140, 0xE0);
+ CreateYesNoMenu(&sYesNoWinTemplate, 3, 0, 2, 0x140, 0xE, 0);
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 10:
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3);
+ species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
+ gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]);
+ personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0);
+ DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
+ break;
+ case 1:
+ case -1:
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 11:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ sEggHatchData->CB2_state++;
+ break;
+ case 12:
+ if (!gPaletteFade.active)
+ {
+ RemoveWindow(sEggHatchData->windowId);
+ UnsetBgTilemapBuffer(0);
+ UnsetBgTilemapBuffer(1);
+ Free(sEggHatchData);
+ SetMainCallback2(CB2_ReturnToField);
+ sub_812B484();
+ }
+ break;
+ }
+
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void SpriteCB_Egg_0(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 20)
+ {
+ sprite->callback = SpriteCB_Egg_1;
+ sprite->data[0] = 0;
+ }
+ else
+ {
+ sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 1);
+ if (sprite->data[0] == 15)
+ {
+ PlaySE(SE_BOWA);
+ StartSpriteAnim(sprite, 1);
+ CreateRandomEggShardSprite();
+ }
+ }
+}
+
+static void SpriteCB_Egg_1(struct Sprite* sprite)
+{
+ if (++sprite->data[2] > 30)
+ {
+ if (++sprite->data[0] > 20)
+ {
+ sprite->callback = SpriteCB_Egg_2;
+ sprite->data[0] = 0;
+ sprite->data[2] = 0;
+ }
+ else
+ {
+ sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 2);
+ if (sprite->data[0] == 15)
+ {
+ PlaySE(SE_BOWA);
+ StartSpriteAnim(sprite, 2);
+ }
+ }
+ }
+}
+
+struct UnkStruct_82349CC
+{
+ u8 field_0;
+ u8 field_1;
+ u8 field_2;
+ u8 field_3;
+};
+
+extern const struct UnkStruct_82349CC gUnknown_82349CC[NUM_SPECIES];
+
+static void SpriteCB_Egg_2(struct Sprite* sprite)
+{
+ if (++sprite->data[2] > 30)
+ {
+ if (++sprite->data[0] > 38)
+ {
+ u16 species;
+
+ sprite->callback = SpriteCB_Egg_3;
+ sprite->data[0] = 0;
+ species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
+ gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0;
+ gSprites[sEggHatchData->pokeSpriteID].pos2.y = gUnknown_82349CC[species].field_1;
+ }
+ else
+ {
+ sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 2);
+ if (sprite->data[0] == 15)
+ {
+ PlaySE(SE_BOWA);
+ StartSpriteAnim(sprite, 2);
+ CreateRandomEggShardSprite();
+ CreateRandomEggShardSprite();
+ }
+ if (sprite->data[0] == 30)
+ PlaySE(SE_BOWA);
+ }
+ }
+}
+
+static void SpriteCB_Egg_3(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 50)
+ {
+ sprite->callback = SpriteCB_Egg_4;
+ sprite->data[0] = 0;
+ }
+}
+
+static void SpriteCB_Egg_4(struct Sprite* sprite)
+{
+ s16 i;
+ if (sprite->data[0] == 0)
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 0x10, 0xFFFF);
+ if (sprite->data[0] < 4u)
+ {
+ for (i = 0; i <= 3; i++)
+ CreateRandomEggShardSprite();
+ }
+ sprite->data[0]++;
+ if (!gPaletteFade.active)
+ {
+ PlaySE(SE_JIHANKI);
+ sprite->invisible = TRUE;
+ sprite->callback = SpriteCB_Egg_5;
+ sprite->data[0] = 0;
+ }
+}
+
+static void SpriteCB_Egg_5(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ gSprites[sEggHatchData->pokeSpriteID].invisible = FALSE;
+ StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], 1);
+ }
+ if (sprite->data[0] == 8)
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0x10, 0, 0xFFFF);
+ if (sprite->data[0] <= 9)
+ gSprites[sEggHatchData->pokeSpriteID].pos1.y -= 1;
+ if (sprite->data[0] > 40)
+ sprite->callback = SpriteCallbackDummy;
+ sprite->data[0]++;
+}
+
+static void SpriteCB_EggShard(struct Sprite* sprite)
+{
+ sprite->data[4] += sprite->data[1];
+ sprite->data[5] += sprite->data[2];
+
+ sprite->pos2.x = sprite->data[4] / 256;
+ sprite->pos2.y = sprite->data[5] / 256;
+
+ sprite->data[2] += sprite->data[3];
+
+ if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data[2] > 0)
+ DestroySprite(sprite);
+}
+
+static void CreateRandomEggShardSprite(void)
+{
+ u16 spriteAnimIndex;
+
+ s16 velocity1 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][0];
+ s16 velocity2 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][1];
+ sEggHatchData->eggShardVelocityID++;
+ spriteAnimIndex = Random() % 4;
+ CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex);
+}
+
+static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex)
+{
+ u8 spriteID = CreateSprite(&sSpriteTemplate_EggShard, x, y, 4);
+ gSprites[spriteID].data[1] = data1;
+ gSprites[spriteID].data[2] = data2;
+ gSprites[spriteID].data[3] = data3;
+ StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex);
+}
+
+static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed)
+{
+ FillWindowPixelBuffer(windowId, 0xFF);
+ sEggHatchData->textColor.fgColor = 0;
+ sEggHatchData->textColor.bgColor = 5;
+ sEggHatchData->textColor.shadowColor = 6;
+ AddTextPrinterParametrized2(windowId, 3, x, y, 1, 1, &sEggHatchData->textColor, speed, string);
+}
+*/
+#include "global.h"
+#include "pokemon.h"
+#include "egg_hatch.h"
+#include "pokedex.h"
+#include "constants/items.h"
+#include "script.h"
+#include "decompress.h"
+#include "task.h"
+#include "palette.h"
+#include "main.h"
+#include "event_data.h"
+#include "sound.h"
+#include "constants/songs.h"
+#include "text.h"
+#include "text_window.h"
+#include "string_util.h"
+#include "menu.h"
+#include "trig.h"
+#include "random.h"
+#include "malloc.h"
+#include "dma3.h"
+#include "gpu_regs.h"
+#include "bg.h"
+#include "m4a.h"
+#include "window.h"
+#include "graphics.h"
+#include "constants/abilities.h"
+#include "constants/species.h"
+#include "daycare.h"
+#include "overworld.h"
+#include "scanline_effect.h"
+#include "field_weather.h"
+#include "international_string_util.h"
+#include "naming_screen.h"
+#include "pokemon_storage_system.h"
+#include "field_screen_effect.h"
+#include "battle.h" // to get rid of later
+#include "help_system.h"
+#include "field_fadetransition.h"
+#include "new_menu_helpers.h"
+
+struct EggHatchData
+{
+ u8 eggSpriteID;
+ u8 pokeSpriteID;
+ u8 CB2_state;
+ u8 CB2_PalCounter;
+ u8 eggPartyID;
+ u8 unused_5;
+ u8 unused_6;
+ u8 eggShardVelocityID;
+ u8 windowId;
+ u8 unused_9;
+ u8 unused_A;
+ u16 species;
+ struct TextColor textColor;
+};
+
+extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle
+extern const u8 gText_HatchedFromEgg[];
+extern const u8 gText_NickHatchPrompt[];
+
+static void Task_EggHatch(u8 taskID);
+static void CB2_EggHatch_0(void);
+static void CB2_EggHatch_1(void);
+static void SpriteCB_Egg_0(struct Sprite* sprite);
+static void SpriteCB_Egg_1(struct Sprite* sprite);
+static void SpriteCB_Egg_2(struct Sprite* sprite);
+static void SpriteCB_Egg_3(struct Sprite* sprite);
+static void SpriteCB_Egg_4(struct Sprite* sprite);
+static void SpriteCB_Egg_5(struct Sprite* sprite);
+static void SpriteCB_EggShard(struct Sprite* sprite);
+static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed);
+static void CreateRandomEggShardSprite(void);
+static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex);
+
+// IWRAM bss
+static IWRAM_DATA struct EggHatchData *sEggHatchData;
+
+// rom data
+static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/palettes/egg_palette.gbapal");
+static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/misc/egg_hatch.4bpp");
+static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp");
+
+static const struct OamData sOamData_EggHatch =
+ {
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(32x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x32),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+ };
+
+static const union AnimCmd sSpriteAnim_EggHatch0[] =
+ {
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd sSpriteAnim_EggHatch1[] =
+ {
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd sSpriteAnim_EggHatch2[] =
+ {
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd sSpriteAnim_EggHatch3[] =
+ {
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd *const sSpriteAnimTable_EggHatch[] =
+ {
+ sSpriteAnim_EggHatch0,
+ sSpriteAnim_EggHatch1,
+ sSpriteAnim_EggHatch2,
+ sSpriteAnim_EggHatch3,
+ };
+
+static const struct SpriteSheet sEggHatch_Sheet =
+ {
+ .data = sEggHatchTiles,
+ .size = 2048,
+ .tag = 12345,
+ };
+
+static const struct SpriteSheet sEggShards_Sheet =
+ {
+ .data = sEggShardTiles,
+ .size = 128,
+ .tag = 23456,
+ };
+
+static const struct SpritePalette sEgg_SpritePalette =
+ {
+ .data = sEggPalette,
+ .tag = 54321
+ };
+
+static const struct SpriteTemplate sSpriteTemplate_EggHatch =
+ {
+ .tileTag = 12345,
+ .paletteTag = 54321,
+ .oam = &sOamData_EggHatch,
+ .anims = sSpriteAnimTable_EggHatch,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+ };
+
+static const struct OamData sOamData_EggShard =
+ {
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(8x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x8),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+ };
+
+static const union AnimCmd sSpriteAnim_EggShard0[] =
+ {
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd sSpriteAnim_EggShard1[] =
+ {
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd sSpriteAnim_EggShard2[] =
+ {
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd sSpriteAnim_EggShard3[] =
+ {
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END
+ };
+
+static const union AnimCmd *const sSpriteAnimTable_EggShard[] =
+ {
+ sSpriteAnim_EggShard0,
+ sSpriteAnim_EggShard1,
+ sSpriteAnim_EggShard2,
+ sSpriteAnim_EggShard3,
+ };
+
+static const struct SpriteTemplate sSpriteTemplate_EggShard =
+ {
+ .tileTag = 23456,
+ .paletteTag = 54321,
+ .oam = &sOamData_EggShard,
+ .anims = sSpriteAnimTable_EggShard,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_EggShard
+ };
+
+static const struct BgTemplate sBgTemplates_EggHatch[2] =
+ {
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 24,
+ .screenSize = 3,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 8,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ };
+
+static const struct WindowTemplate sWinTemplates_EggHatch[2] =
+ {
+ {
+ .priority = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 15,
+ .width = 26,
+ .height = 4,
+ .paletteNum = 0,
+ .baseBlock = 64
+ },
+ DUMMY_WIN_TEMPLATE
+ };
+
+static const struct WindowTemplate sYesNoWinTemplate =
+ {
+ .priority = 0,
+ .tilemapLeft = 21,
+ .tilemapTop = 9,
+ .width = 5,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 424
+ };
+
+static const s16 sEggShardVelocities[][2] =
+ {
+ {Q_8_8(-1.5), Q_8_8(-3.75)},
+ {Q_8_8(-5), Q_8_8(-3)},
+ {Q_8_8(3.5), Q_8_8(-3)},
+ {Q_8_8(-4), Q_8_8(-3.75)},
+ {Q_8_8(2), Q_8_8(-1.5)},
+ {Q_8_8(-0.5), Q_8_8(-6.75)},
+ {Q_8_8(5), Q_8_8(-2.25)},
+ {Q_8_8(-1.5), Q_8_8(-3.75)},
+ {Q_8_8(4.5), Q_8_8(-1.5)},
+ {Q_8_8(-1), Q_8_8(-6.75)},
+ {Q_8_8(4), Q_8_8(-2.25)},
+ {Q_8_8(-3.5), Q_8_8(-3.75)},
+ {Q_8_8(1), Q_8_8(-1.5)},
+ {Q_8_8(-3.515625), Q_8_8(-6.75)},
+ {Q_8_8(4.5), Q_8_8(-2.25)},
+ {Q_8_8(-0.5), Q_8_8(-7.5)},
+ {Q_8_8(1), Q_8_8(-4.5)},
+ {Q_8_8(-2.5), Q_8_8(-2.25)},
+ {Q_8_8(2.5), Q_8_8(-7.5)},
+ };
+
+// code
+
+static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
+{
+ u16 species;
+ u32 personality, pokerus;
+ u8 i, friendship, language, gameMet, markings, obedience;
+ u16 moves[4];
+ u32 ivs[NUM_STATS];
+
+
+ species = GetMonData(egg, MON_DATA_SPECIES);
+
+ for (i = 0; i < 4; i++)
+ {
+ moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i);
+ }
+
+ personality = GetMonData(egg, MON_DATA_PERSONALITY);
+
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i);
+ }
+
+// language = GetMonData(egg, MON_DATA_LANGUAGE);
+ gameMet = GetMonData(egg, MON_DATA_MET_GAME);
+ markings = GetMonData(egg, MON_DATA_MARKINGS);
+ pokerus = GetMonData(egg, MON_DATA_POKERUS);
+ obedience = GetMonData(egg, MON_DATA_OBEDIENCE);
+
+ CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, 0, 0);
+
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(temp, MON_DATA_MOVE1 + i, &moves[i]);
+ }
+
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ SetMonData(temp, MON_DATA_HP_IV + i, &ivs[i]);
+ }
+
+ language = GAME_LANGUAGE;
+ SetMonData(temp, MON_DATA_LANGUAGE, &language);
+ SetMonData(temp, MON_DATA_MET_GAME, &gameMet);
+ SetMonData(temp, MON_DATA_MARKINGS, &markings);
+
+ friendship = 120;
+ SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship);
+ SetMonData(temp, MON_DATA_POKERUS, &pokerus);
+ SetMonData(temp, MON_DATA_OBEDIENCE, &obedience);
+
+ *egg = *temp;
+}
+
+static void AddHatchedMonToParty(u8 id)
+{
+ u8 isEgg = 0x46; // ?
+ u16 pokeNum;
+ u8 name[12];
+ u16 ball;
+ u16 caughtLvl;
+ u8 mapNameID;
+ struct Pokemon* mon = &gPlayerParty[id];
+
+ CreatedHatchedMon(mon, &gEnemyParty[0]);
+ SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
+
+ pokeNum = GetMonData(mon, MON_DATA_SPECIES);
+ GetSpeciesName(name, pokeNum);
+ SetMonData(mon, MON_DATA_NICKNAME, name);
+
+ pokeNum = SpeciesToNationalPokedexNum(pokeNum);
+ GetSetPokedexFlag(pokeNum, FLAG_SET_SEEN);
+ GetSetPokedexFlag(pokeNum, FLAG_SET_CAUGHT);
+
+ GetMonNick(mon, gStringVar1);
+
+ ball = ITEM_POKE_BALL;
+ SetMonData(mon, MON_DATA_POKEBALL, &ball);
+
+ caughtLvl = 0;
+ SetMonData(mon, MON_DATA_MET_LEVEL, &caughtLvl);
+
+ mapNameID = GetCurrentRegionMapSectionId();
+ SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID);
+
+ MonRestorePP(mon);
+ CalculateMonStats(mon);
+}
+
+void ScriptHatchMon(void)
+{
+ AddHatchedMonToParty(gSpecialVar_0x8004);
+}
+
+static bool8 sub_8046E34(struct DayCare *daycare, u8 daycareId)
+{
+ u8 nick[0x20];
+ struct DaycareMon *daycareMon = &daycare->mons[daycareId];
+
+ GetBoxMonNick(&daycareMon->mon, nick);
+ if (daycareMon->mail.message.itemId != 0
+ && (StringCompare(nick, daycareMon->mail.monName) != 0
+ || StringCompare(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0))
+ {
+ StringCopy(gStringVar1, nick);
+ StringCopy(gStringVar2, daycareMon->mail.OT_name);
+ StringCopy(gStringVar3, daycareMon->mail.monName);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_8046EAC(void)
+{
+ return sub_8046E34(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
+}
+
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+
+static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc)
+{
+ u8 r4 = 0;
+ u8 spriteID = 0; // r7
+ struct Pokemon* mon = NULL; // r5
+
+ if (a0 == 0)
+ {
+ mon = &gPlayerParty[pokeID];
+ r4 = 1;
+ }
+ if (a0 == 1)
+ {
+ mon = &gPlayerParty[pokeID];
+ r4 = 3;
+ }
+ switch (switchID)
+ {
+ case 0:
+ {
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u32 pid = GetMonData(mon, MON_DATA_PERSONALITY);
+ sub_800ECC4(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[(a0 * 2) + 1], species, pid);
+ LoadCompressedObjectPalette(GetMonSpritePalStruct(mon));
+ *speciesLoc = species;
+ }
+ break;
+ case 1:
+ SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, r4);
+ spriteID = CreateSprite(&gMultiuseSpriteTemplate, 120, 70, 6);
+ gSprites[spriteID].invisible = TRUE;
+ gSprites[spriteID].callback = SpriteCallbackDummy;
+ break;
+ }
+ return spriteID;
+}
+
+static void VBlankCB_EggHatch(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void EggHatch(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(Task_EggHatch, 10);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ sub_812B478();
+}
+
+static void Task_EggHatch(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ CleanupOverworldWindowsAndTilemaps();
+ SetMainCallback2(CB2_EggHatch_0);
+ gFieldCallback = FieldCallback_ReturnToEventScript2;
+ DestroyTask(taskID);
+ }
+}
+
+static void CB2_EggHatch_0(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+
+ sEggHatchData = Alloc(sizeof(struct EggHatchData));
+ AllocateMonSpritesGfx();
+ sEggHatchData->eggPartyID = gSpecialVar_0x8004;
+ sEggHatchData->eggShardVelocityID = 0;
+
+ SetVBlankCallback(VBlankCB_EggHatch);
+ gSpecialVar_0x8005 = GetCurrentMapMusic();
+
+ reset_temp_tile_data_buffers();
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sBgTemplates_EggHatch, ARRAY_COUNT(sBgTemplates_EggHatch));
+
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+
+ SetBgAttribute(1, 7, 2);
+ SetBgTilemapBuffer(1, Alloc(0x1000));
+ SetBgTilemapBuffer(0, Alloc(0x2000));
+
+ DeactivateAllTextPrinters();
+ ResetPaletteFade();
+ FreeAllSpritePalettes();
+ ResetSpriteData();
+ ResetTasks();
+ ScanlineEffect_Stop();
+ m4aSoundVSyncOn();
+ gMain.state++;
+ break;
+ case 1:
+ InitWindows(sWinTemplates_EggHatch);
+ sEggHatchData->windowId = 0;
+ gMain.state++;
+ break;
+ case 2:
+ DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0);
+ CopyToBgTilemapBuffer(0, gFile_graphics_interface_menu_map_tilemap, 0, 0);
+ LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20);
+ gMain.state++;
+ break;
+ case 3:
+ LoadSpriteSheet(&sEggHatch_Sheet);
+ LoadSpriteSheet(&sEggShards_Sheet);
+ LoadSpritePalette(&sEgg_SpritePalette);
+ gMain.state++;
+ break;
+ case 4:
+ CopyBgTilemapBufferToVram(0);
+ AddHatchedMonToParty(sEggHatchData->eggPartyID);
+ gMain.state++;
+ break;
+ case 5:
+ EggHatchCreateMonSprite(0, 0, sEggHatchData->eggPartyID, &sEggHatchData->species);
+ gMain.state++;
+ break;
+ case 6:
+ sEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, sEggHatchData->eggPartyID, &sEggHatchData->species);
+ gMain.state++;
+ break;
+ case 7:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ LoadPalette(gTradeGba2_Pal, 0x10, 0xA0);
+ LoadBgTiles(1, gTradeGba_Gfx, 0x1420, 0);
+ CopyToBgTilemapBuffer(1, gUnknown_08331F60, 0x1000, 0);
+ CopyBgTilemapBufferToVram(1);
+ gMain.state++;
+ break;
+ case 8:
+ SetMainCallback2(CB2_EggHatch_1);
+ sEggHatchData->CB2_state = 0;
+ break;
+ }
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void EggHatchSetMonNickname(void)
+{
+ SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3);
+ FreeMonSpritesGfx();
+ Free(sEggHatchData);
+ sub_812B484();
+ SetMainCallback2(CB2_ReturnToField);
+}
+
+static void Task_EggHatchPlayBGM(u8 taskID)
+{
+ if (gTasks[taskID].data[0] == 0)
+ {
+ StopMapMusic();
+ }
+ if (gTasks[taskID].data[0] == 1)
+ PlayBGM(MUS_ME_SHINKA);
+ if (gTasks[taskID].data[0] > 60)
+ {
+ PlayBGM(MUS_SHINKA);
+ DestroyTask(taskID);
+ // UB: task is destroyed, yet the value is incremented
+ }
+ gTasks[taskID].data[0]++;
+}
+
+static void CB2_EggHatch_1(void)
+{
+ u16 species;
+ u8 gender;
+ u32 personality;
+
+ switch (sEggHatchData->CB2_state)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ sEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_EggHatch, 120, 75, 5);
+ ShowBg(0);
+ ShowBg(1);
+ sEggHatchData->CB2_state++;
+ CreateTask(Task_EggHatchPlayBGM, 5);
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ FillWindowPixelBuffer(sEggHatchData->windowId, 0x00);
+ sEggHatchData->CB2_PalCounter = 0;
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 2:
+ if (++sEggHatchData->CB2_PalCounter > 30)
+ {
+ sEggHatchData->CB2_state++;
+ gSprites[sEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0;
+ }
+ break;
+ case 3:
+ if (gSprites[sEggHatchData->eggSpriteID].callback == SpriteCallbackDummy)
+ {
+ PlayCry1(sEggHatchData->species, 0);
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 4:
+ if (IsCryFinished())
+ {
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 5:
+ GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg);
+ EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF);
+ PlayFanfare(MUS_FANFA5);
+ sEggHatchData->CB2_state++;
+ PutWindowTilemap(sEggHatchData->windowId);
+ CopyWindowToVram(sEggHatchData->windowId, 3);
+ break;
+ case 6:
+ if (IsFanfareTaskInactive())
+ sEggHatchData->CB2_state++;
+ break;
+ case 7:
+ if (IsFanfareTaskInactive())
+ sEggHatchData->CB2_state++;
+ break;
+ case 8:
+ GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_NickHatchPrompt);
+ EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 2, 1);
+ sEggHatchData->CB2_state++;
+ break;
+ case 9:
+ if (!IsTextPrinterActive(sEggHatchData->windowId))
+ {
+ LoadUserWindowBorderGfx(sEggHatchData->windowId, 0x140, 0xE0);
+ CreateYesNoMenu(&sYesNoWinTemplate, 3, 0, 2, 0x140, 0xE, 0);
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 10:
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3);
+ species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
+ gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]);
+ personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0);
+ DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
+ break;
+ case 1:
+ case -1:
+ sEggHatchData->CB2_state++;
+ }
+ break;
+ case 11:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ sEggHatchData->CB2_state++;
+ break;
+ case 12:
+ if (!gPaletteFade.active)
+ {
+ RemoveWindow(sEggHatchData->windowId);
+ UnsetBgTilemapBuffer(0);
+ UnsetBgTilemapBuffer(1);
+ Free(sEggHatchData);
+ SetMainCallback2(CB2_ReturnToField);
+ sub_812B484();
+ }
+ break;
+ }
+
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void SpriteCB_Egg_0(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 20)
+ {
+ sprite->callback = SpriteCB_Egg_1;
+ sprite->data[0] = 0;
+ }
+ else
+ {
+ sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 1);
+ if (sprite->data[0] == 15)
+ {
+ PlaySE(SE_BOWA);
+ StartSpriteAnim(sprite, 1);
+ CreateRandomEggShardSprite();
+ }
+ }
+}
+
+static void SpriteCB_Egg_1(struct Sprite* sprite)
+{
+ if (++sprite->data[2] > 30)
+ {
+ if (++sprite->data[0] > 20)
+ {
+ sprite->callback = SpriteCB_Egg_2;
+ sprite->data[0] = 0;
+ sprite->data[2] = 0;
+ }
+ else
+ {
+ sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 2);
+ if (sprite->data[0] == 15)
+ {
+ PlaySE(SE_BOWA);
+ StartSpriteAnim(sprite, 2);
+ }
+ }
+ }
+}
+
+struct UnkStruct_82349CC
+{
+ u8 field_0;
+ u8 field_1;
+ u8 field_2;
+ u8 field_3;
+};
+
+extern const struct UnkStruct_82349CC gUnknown_82349CC[NUM_SPECIES];
+
+static void SpriteCB_Egg_2(struct Sprite* sprite)
+{
+ if (++sprite->data[2] > 30)
+ {
+ if (++sprite->data[0] > 38)
+ {
+ u16 species;
+
+ sprite->callback = SpriteCB_Egg_3;
+ sprite->data[0] = 0;
+ species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
+ gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0;
+ gSprites[sEggHatchData->pokeSpriteID].pos2.y = gUnknown_82349CC[species].field_1;
+ }
+ else
+ {
+ sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 2);
+ if (sprite->data[0] == 15)
+ {
+ PlaySE(SE_BOWA);
+ StartSpriteAnim(sprite, 2);
+ CreateRandomEggShardSprite();
+ CreateRandomEggShardSprite();
+ }
+ if (sprite->data[0] == 30)
+ PlaySE(SE_BOWA);
+ }
+ }
+}
+
+static void SpriteCB_Egg_3(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 50)
+ {
+ sprite->callback = SpriteCB_Egg_4;
+ sprite->data[0] = 0;
+ }
+}
+
+static void SpriteCB_Egg_4(struct Sprite* sprite)
+{
+ s16 i;
+ if (sprite->data[0] == 0)
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 0x10, 0xFFFF);
+ if (sprite->data[0] < 4u)
+ {
+ for (i = 0; i <= 3; i++)
+ CreateRandomEggShardSprite();
+ }
+ sprite->data[0]++;
+ if (!gPaletteFade.active)
+ {
+ PlaySE(SE_JIHANKI);
+ sprite->invisible = TRUE;
+ sprite->callback = SpriteCB_Egg_5;
+ sprite->data[0] = 0;
+ }
+}
+
+static void SpriteCB_Egg_5(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ gSprites[sEggHatchData->pokeSpriteID].invisible = FALSE;
+ StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], 1);
+ }
+ if (sprite->data[0] == 8)
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0x10, 0, 0xFFFF);
+ if (sprite->data[0] <= 9)
+ gSprites[sEggHatchData->pokeSpriteID].pos1.y -= 1;
+ if (sprite->data[0] > 40)
+ sprite->callback = SpriteCallbackDummy;
+ sprite->data[0]++;
+}
+
+static void SpriteCB_EggShard(struct Sprite* sprite)
+{
+ sprite->data[4] += sprite->data[1];
+ sprite->data[5] += sprite->data[2];
+
+ sprite->pos2.x = sprite->data[4] / 256;
+ sprite->pos2.y = sprite->data[5] / 256;
+
+ sprite->data[2] += sprite->data[3];
+
+ if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data[2] > 0)
+ DestroySprite(sprite);
+}
+
+static void CreateRandomEggShardSprite(void)
+{
+ u16 spriteAnimIndex;
+
+ s16 velocity1 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][0];
+ s16 velocity2 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][1];
+ sEggHatchData->eggShardVelocityID++;
+ spriteAnimIndex = Random() % 4;
+ CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex);
+}
+
+static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex)
+{
+ u8 spriteID = CreateSprite(&sSpriteTemplate_EggShard, x, y, 4);
+ gSprites[spriteID].data[1] = data1;
+ gSprites[spriteID].data[2] = data2;
+ gSprites[spriteID].data[3] = data3;
+ StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex);
+}
+
+static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed)
+{
+ FillWindowPixelBuffer(windowId, 0xFF);
+ sEggHatchData->textColor.fgColor = 0;
+ sEggHatchData->textColor.bgColor = 5;
+ sEggHatchData->textColor.shadowColor = 6;
+ AddTextPrinterParametrized2(windowId, 3, x, y, 1, 1, &sEggHatchData->textColor, speed, string);
+}
diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c
index 0cbfb4be5..599ef387b 100644
--- a/src/mystery_gift_menu.c
+++ b/src/mystery_gift_menu.c
@@ -459,9 +459,9 @@ bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader)
SetBgTilemapBuffer(1, Alloc(0x800));
SetBgTilemapBuffer(0, Alloc(0x800));
- sub_814FE40(0, 10, 0xE0);
+ LoadUserWindowBorderGfx(0, 10, 0xE0);
sub_814FDA0(0, 1, 0xF0);
- sub_80F696C(3, gUnkTextboxBorderGfx, 0x100, 0, 0);
+ DecompressAndLoadBgGfxUsingHeap(3, gUnkTextboxBorderGfx, 0x100, 0, 0);
InitWindows(sMainWindows);
DeactivateAllTextPrinters();
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON);
@@ -753,11 +753,11 @@ s8 mevent_message_print_and_prompt_yes_no(u8 * textState, u16 * windowId, bool8
{
windowTemplate.tilemapTop = 15;
}
- sub_810FF60(&windowTemplate, 2, 0, 2, 10, 14, 0);
+ CreateYesNoMenu(&windowTemplate, 2, 0, 2, 10, 14, 0);
(*textState)++;
break;
case 2:
- input = ProcessMenuInputNoWrap_();
+ input = Menu_ProcessInputNoWrapClearOnChoose();
if (input == -1 || input == 0 || input == 1)
{
*textState = 0;
diff --git a/src/oak_speech.c b/src/oak_speech.c
index eb87723a6..0100d76d3 100644
--- a/src/oak_speech.c
+++ b/src/oak_speech.c
@@ -1246,7 +1246,7 @@ static void Task_OakSpeech26(u8 taskId)
data[3]--;
else
{
- sub_810FF60(&sNewGameAdventureIntroWindowTemplates[2], 2, 0, 2, sub_80F796C(), 14, 0);
+ CreateYesNoMenu(&sNewGameAdventureIntroWindowTemplates[2], 2, 0, 2, sub_80F796C(), 14, 0);
gTasks[taskId].func = Task_OakSpeech27;
}
}
@@ -1255,7 +1255,7 @@ static void Task_OakSpeech26(u8 taskId)
static void Task_OakSpeech27(u8 taskId)
{
- s8 input = ProcessMenuInputNoWrap_();
+ s8 input = Menu_ProcessInputNoWrapClearOnChoose();
switch (input)
{
case 0:
@@ -1614,7 +1614,7 @@ static void CreateNidoranFSprite(u8 taskId)
DecompressPicFromTable(gUnknown_8235194, sub_8044E00(0), SPECIES_NIDORAN_F);
sub_800F078(&gUnknown_82373F4);
- sub_803F7D4(SPECIES_NIDORAN_F, 0);
+ SetMultiuseSpriteTemplateToPokemon(SPECIES_NIDORAN_F, 0);
spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x60, 0x60, 1);
gSprites[spriteId].callback = SpriteCallbackDummy;
gSprites[spriteId].oam.priority = 1;
diff --git a/src/pokemon.c b/src/pokemon.c
index 0d4042137..7700d537a 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -80,7 +80,7 @@ extern const u16 sHMMoves[];
extern s8 gPokeblockFlavorCompatibilityTable[];
// External functions
-extern u8 sav1_map_get_name(void); // overworld
+extern u8 GetCurrentRegionMapSectionId(void); // overworld
extern const struct BattleMove gBattleMoves[];
extern u8 sBattler_AI; // battle_ai
extern void set_unknown_box_id(u8); // field_specials
@@ -194,7 +194,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
SetBoxMonData(boxMon, MON_DATA_SPECIES, &species);
SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gBaseStats[species].growthRate][level]);
SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship);
- value = sav1_map_get_name();
+ value = GetCurrentRegionMapSectionId();
SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, &value);
SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level);
SetBoxMonData(boxMon, MON_DATA_MET_GAME, &gGameVersion);
@@ -1122,7 +1122,7 @@ u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality)
return MON_MALE;
}
-void sub_803F7D4(u16 trainerSpriteId, u8 battlerPosition)
+void SetMultiuseSpriteTemplateToPokemon(u16 trainerSpriteId, u8 battlerPosition)
{
if(gMonSpritesGfxPtr != NULL)
{
@@ -2769,7 +2769,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
{
if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
@@ -2794,7 +2794,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
{
if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
@@ -2818,7 +2818,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
{
if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
@@ -3320,7 +3320,7 @@ bool8 PokemonUseItemEffects2(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 m
{
if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
@@ -3347,7 +3347,7 @@ bool8 PokemonUseItemEffects2(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 m
{
if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
@@ -3373,7 +3373,7 @@ bool8 PokemonUseItemEffects2(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 m
{
if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
@@ -5033,7 +5033,7 @@ void AdjustFriendship(struct Pokemon *mon, u8 event)
{
if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL)
friendship++;
- if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == sav1_map_get_name())
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == GetCurrentRegionMapSectionId())
friendship++;
}
diff --git a/src/quest_log_battle.c b/src/quest_log_battle.c
index c702b6a5c..d4d1245ec 100644
--- a/src/quest_log_battle.c
+++ b/src/quest_log_battle.c
@@ -71,7 +71,7 @@ void sub_812BFDC(void)
playerEndingHP = gBattleMons[GetBattlerAtPosition(0)].hp;
playerMaxHP = gBattleMons[GetBattlerAtPosition(0)].maxHP;
}
- questLogTrainerBattleRecord->v7 = sav1_map_get_name();
+ questLogTrainerBattleRecord->v7 = GetCurrentRegionMapSectionId();
questLogTrainerBattleRecord->v6 = 0;
if (playerEndingHP < playerMaxHP / 3 * 2)
questLogTrainerBattleRecord->v6 = 1;
@@ -91,7 +91,7 @@ void sub_812BFDC(void)
questLogWildBattleRecord->v0 = SPECIES_NONE;
questLogWildBattleRecord->v2 = GetMonData(gEnemyParty + 0, MON_DATA_SPECIES);
}
- questLogWildBattleRecord->v4 = sav1_map_get_name();
+ questLogWildBattleRecord->v4 = GetCurrentRegionMapSectionId();
sub_8113550(31, (const u16 *)questLogWildBattleRecord);
}
Free(questLogTrainerBattleRecord);
diff --git a/src/seagallop.c b/src/seagallop.c
index 001c827e5..7cdd6ebd0 100644
--- a/src/seagallop.c
+++ b/src/seagallop.c
@@ -322,7 +322,7 @@ static void Task_SeaGallop_3(void)
Overworld_SetWarpDestination(warpInfo[0], warpInfo[1], -1, warpInfo[2], warpInfo[3]);
PlayRainStoppingSoundEffect();
PlaySE(SE_KAIDAN);
- gUnknown_3005020 = sub_807DF64;
+ gFieldCallback = sub_807DF64;
warp_in();
SetMainCallback2(sub_805671C);
ResetInitialPlayerAvatarState();
@@ -458,3 +458,42 @@ static bool8 GetDirectionOfTravel(void)
}
return (sTravelDirectionMatrix[gSpecialVar_0x8004] >> gSpecialVar_0x8006) & 1;
}
+
+u8 sub_8147500(void)
+{
+ u16 originId, destId;
+
+ originId = gSpecialVar_0x8004;
+ destId = gSpecialVar_0x8006;
+
+ if (originId == SEAGALLOP_CINNABAR_ISLAND || destId == SEAGALLOP_CINNABAR_ISLAND)
+ return 1;
+
+ if (originId == SEAGALLOP_VERMILION_CITY || destId == SEAGALLOP_VERMILION_CITY)
+ return 7;
+
+ if (originId == SEAGALLOP_NAVEL_ROCK || destId == SEAGALLOP_NAVEL_ROCK)
+ return 10;
+
+ if (originId == SEAGALLOP_BIRTH_ISLAND || destId == SEAGALLOP_BIRTH_ISLAND)
+ return 12;
+
+ if ((originId == SEAGALLOP_ONE_ISLAND || originId == SEAGALLOP_TWO_ISLAND || originId == SEAGALLOP_THREE_ISLAND) && (destId == SEAGALLOP_ONE_ISLAND || destId == SEAGALLOP_TWO_ISLAND || destId == SEAGALLOP_THREE_ISLAND))
+ return 2;
+
+ if ((originId == SEAGALLOP_FOUR_ISLAND || originId == SEAGALLOP_FIVE_ISLAND) && (destId == SEAGALLOP_FOUR_ISLAND || destId == SEAGALLOP_FIVE_ISLAND))
+ return 3;
+
+ if ((originId == SEAGALLOP_SIX_ISLAND || originId == SEAGALLOP_SEVEN_ISLAND) && (destId == SEAGALLOP_SIX_ISLAND || destId == SEAGALLOP_SEVEN_ISLAND))
+ return 5;
+
+ return 6;
+}
+
+bool8 sub_8147594(void)
+{
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(VERMILIONCITY) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(VERMILIONCITY) && gSaveBlock1Ptr->pos.x < 24)
+ return TRUE;
+
+ return FALSE;
+}
diff --git a/src/trainer_tower.c b/src/trainer_tower.c
index e914d7ac6..d2f7c92a9 100644
--- a/src/trainer_tower.c
+++ b/src/trainer_tower.c
@@ -1171,7 +1171,7 @@ void sub_815E124(u8 taskId)
if (sub_80D08F8() == TRUE)
{
gMain.savedCallback = sub_815E114;
- sub_80563F0();
+ CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(sub_800FD9C);
DestroyTask(taskId);
}
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
index 9cf6a6e04..bd5b9c7ea 100644
--- a/src/vs_seeker.c
+++ b/src/vs_seeker.c
@@ -19,6 +19,7 @@
#include "random.h"
#include "field_map_obj.h"
#include "field_player_avatar.h"
+#include "map_obj_80688E4.h"
#include "map_obj_8097404.h"
#include "unk_810c3a4.h"
#include "constants/movement_commands.h"
@@ -70,6 +71,8 @@ extern u8 gSelectedEventObject;
// static declarations
static EWRAM_DATA struct VsSeekerStruct *sVsSeeker = NULL;
+static void sub_810C3B8(u8 taskId);
+static void sub_810C594(void);
static void Task_VsSeeker_1(u8 taskId);
static void Task_VsSeeker_2(u8 taskId);
static void GatherNearbyTrainerInfo(void);
@@ -565,6 +568,229 @@ static const u8 gUnknown_8453F67[] = { 0x08, 0x08, 0x07, 0x09, 0x0a };
// text
+
+
+void sub_810C3A4(void)
+{
+ CreateTask(sub_810C3B8, 80);
+}
+
+static void sub_810C3B8(u8 taskId)
+{
+ struct Task * task = &gTasks[taskId];
+ u8 i;
+
+ if (task->data[0] == 0 && walkrun_is_standing_still() == TRUE)
+ {
+ sub_805C270();
+ task->data[0] = 1;
+ }
+
+ if (task->data[1] == 0)
+ {
+ for (i = 0; i < MAP_OBJECTS_COUNT; i++)
+ {
+ if (sub_810CF04(i) == TRUE)
+ {
+ if (gMapObjects[i].mapobj_bit_1)
+ return;
+ FreezeMapObject(&gMapObjects[i]);
+ }
+ }
+ }
+
+ task->data[1] = 1;
+ if (task->data[0] != 0)
+ {
+ DestroyTask(taskId);
+ sub_805C780();
+ EnableBothScriptContexts();
+ }
+}
+
+void sub_810C444(void)
+{
+ struct MapObjectTemplate * templates = gSaveBlock1Ptr->mapObjectTemplates;
+ u8 i;
+ u8 r6;
+ u8 sp0;
+ struct MapObject * mapObject;
+
+ for (i = 0; i < gMapHeader.events->mapObjectCount; i++)
+ {
+ if ((templates[i].unkC == 1 || templates[i].unkC == 3) && (templates[i].movementType == 0x4D || templates[i].movementType == 0x4E || templates[i].movementType == 0x4F))
+ {
+ r6 = sub_810CF54();
+ TryGetFieldObjectIdByLocalIdAndMap(templates[i].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &sp0);
+ mapObject = &gMapObjects[sp0];
+ if (sub_810CF04(sp0) == TRUE)
+ {
+ npc_set_running_behaviour_etc(mapObject, r6);
+ }
+ templates[i].movementType = r6;
+ }
+ }
+}
+
+#ifdef NONMATCHING
+bool8 sub_810C4EC(void)
+{
+ if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE)
+ {
+ if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100)
+ gSaveBlock1Ptr->trainerRematchStepCounter++;
+ }
+
+ if (FlagGet(0x801) == TRUE)
+ {
+ u16 x;
+ do {
+ x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF;
+ } while (0);
+ if (x < 100)
+ {
+ x++;
+ gSaveBlock1Ptr->trainerRematchStepCounter = ((u16)(x << 8)) | (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF);
+ }
+ do {
+ x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF;
+ } while (0);
+ if (x == 100)
+ {
+ FlagClear(0x801);
+ sub_810C640();
+ sub_810D0D0();
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+#else
+NAKED
+bool8 sub_810C4EC(void)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmovs r0, 0xB5\n"
+ "\tlsls r0, 1\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl CheckBagHasItem\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x1\n"
+ "\tbne _0810C516\n"
+ "\tldr r0, _0810C568 @ =gSaveBlock1Ptr\n"
+ "\tldr r0, [r0]\n"
+ "\tmovs r2, 0xC7\n"
+ "\tlsls r2, 3\n"
+ "\tadds r1, r0, r2\n"
+ "\tldrh r2, [r1]\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r0, 0x63\n"
+ "\tbhi _0810C516\n"
+ "\tadds r0, r2, 0x1\n"
+ "\tstrh r0, [r1]\n"
+ "_0810C516:\n"
+ "\tldr r7, _0810C56C @ =0x00000801\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl FlagGet\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x1\n"
+ "\tbne _0810C570\n"
+ "\tldr r6, _0810C568 @ =gSaveBlock1Ptr\n"
+ "\tldr r0, [r6]\n"
+ "\tmovs r5, 0xC7\n"
+ "\tlsls r5, 3\n"
+ "\tadds r3, r0, r5\n"
+ "\tldrh r2, [r3]\n"
+ "\tlsrs r1, r2, 8\n"
+ "\tmovs r4, 0xFF\n"
+ "\tcmp r1, 0x63\n"
+ "\tbhi _0810C548\n"
+ "\tadds r1, 0x1\n"
+ "\tlsls r1, 24\n"
+ "\tmovs r0, 0xFF\n"
+ "\tands r0, r2\n"
+ "\tlsrs r1, 16\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r3]\n"
+ "_0810C548:\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, r5\n"
+ "\tldrh r0, [r0]\n"
+ "\tlsrs r0, 8\n"
+ "\tands r0, r4\n"
+ "\tcmp r0, 0x64\n"
+ "\tbne _0810C570\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl FlagClear\n"
+ "\tbl sub_810C640\n"
+ "\tbl sub_810D0D0\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _0810C572\n"
+ "\t.align 2, 0\n"
+ "_0810C568: .4byte gSaveBlock1Ptr\n"
+ "_0810C56C: .4byte 0x00000801\n"
+ "_0810C570:\n"
+ "\tmovs r0, 0\n"
+ "_0810C572:\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+#endif
+
+void sub_810C578(void)
+{
+ FlagClear(0x801);
+ sub_810C640();
+ sub_810D0D0();
+ sub_810C594();
+}
+
+static void sub_810C594(void)
+{
+ u8 i;
+
+ for (i = 0; i < MAP_OBJECTS_COUNT; i++)
+ {
+ struct MapObject * mapObject = &gMapObjects[i];
+ if (mapObject->animPattern == 0x4D || mapObject->animPattern == 0x4E || mapObject->animPattern == 0x4F)
+ {
+ u8 r3 = sub_810CF54();
+ if (mapObject->active && gSprites[mapObject->spriteId].data[0] == i)
+ {
+ gSprites[mapObject->spriteId].pos2.x = 0;
+ gSprites[mapObject->spriteId].pos2.y = 0;
+ npc_set_running_behaviour_etc(mapObject, r3);
+ }
+ }
+ }
+}
+
+void sub_810C604(void)
+{
+ gSaveBlock1Ptr->trainerRematchStepCounter &= 0xFF00;
+}
+
+void sub_810C620(void)
+{
+ gSaveBlock1Ptr->trainerRematchStepCounter &= 0xFF00;
+ gSaveBlock1Ptr->trainerRematchStepCounter |= 100;
+}
+
+void sub_810C640(void)
+{
+ gSaveBlock1Ptr->trainerRematchStepCounter &= 0x00FF;
+}
+
+void sub_810C654(void)
+{
+ gSaveBlock1Ptr->trainerRematchStepCounter &= 0x00FF;
+ gSaveBlock1Ptr->trainerRematchStepCounter |= (100 << 8);
+}
+
void Task_VsSeeker_0(u8 taskId)
{
u8 i;
@@ -1225,7 +1451,7 @@ static u16 GetTrainerFlagFromScript(const u8 *script)
* because the ARM processor requires shorts to be 16-bit
* aligned, this function needs to perform explicit bitwise
* operations to get the correct flag.
- *
+ *
* 5c XX YY ZZ ...
* -- --
*/
@@ -1360,7 +1586,7 @@ static void StartAllRespondantIdleMovements(void)
u8 dummy = 0;
s32 i;
s32 j;
-
+
for (i = 0; i < sVsSeeker->numRematchableTrainers; i++)
{
for (j = 0; sVsSeeker->trainerInfo[j].localId != 0xFF; j++)
diff --git a/sym_bss.txt b/sym_bss.txt
index 529460f3e..88c464566 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -60,8 +60,7 @@ gUnknown_3000E6B: @ 3000E6B
gUnknown_3000E6C: @ 3000E6C
.space 0x8
-gUnknown_3000E74: @ 3000E74
- .space 0x4
+ .include "src/daycare.o"
gUnknown_3000E78: @ 3000E78
.space 0x4
diff --git a/sym_common.txt b/sym_common.txt
index 7424575e8..6f47cb531 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -145,7 +145,7 @@ gUnknown_3005018: @ 3005018
gUnknown_300501C: @ 300501C
.space 0x4
-gUnknown_3005020: @ 3005020
+gFieldCallback: @ 3005020
.space 0x4
gFieldCallback2: @ 3005024