summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2020-03-29 09:27:45 -0400
committerGitHub <noreply@github.com>2020-03-29 09:27:45 -0400
commit75ae00beff77e166c4ae573300ed5cb31175e8ac (patch)
treeec15c56d3b09c2cec74ac907110c9111e18e8729
parentd8c9214e0a911882daf28dec07204de3c3c2df80 (diff)
parent9cfc34f2ec26d45085d9c4006b21406f8f968ed6 (diff)
Merge pull request #315 from PikalaxALT/overworld
Overworld
-rw-r--r--asm/overworld.s8010
-rw-r--r--berry_fix/payload/include/global.h4
-rw-r--r--common_syms/overworld.txt8
-rw-r--r--data/maps/CinnabarIsland/scripts.inc2
-rw-r--r--data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc2
-rw-r--r--data/maps/PalletTown/scripts.inc2
-rw-r--r--data/maps/PalletTown_ProfessorOaksLab/scripts.inc2
-rw-r--r--data/maps/RecordCenter/map.json8
-rw-r--r--data/overworld.s126
-rw-r--r--data/scripts/cable_club.inc6
-rw-r--r--include/bg_regs.h1
-rw-r--r--include/cable_club.h1
-rw-r--r--include/constants/flags.h3
-rw-r--r--include/credits.h16
-rw-r--r--include/event_data.h1
-rw-r--r--include/event_object_movement.h4
-rw-r--r--include/event_scripts.h22
-rw-r--r--include/field_camera.h6
-rw-r--r--include/field_effect.h1
-rw-r--r--include/field_fadetransition.h12
-rw-r--r--include/field_message_box.h1
-rw-r--r--include/field_player_avatar.h2
-rw-r--r--include/field_screen_effect.h5
-rw-r--r--include/field_specials.h5
-rw-r--r--include/field_tasks.h1
-rw-r--r--include/field_weather.h4
-rw-r--r--include/fieldmap.h12
-rw-r--r--include/fldeff.h1
-rw-r--r--include/global.fieldmap.h22
-rw-r--r--include/global.h4
-rw-r--r--include/heal_location.h2
-rw-r--r--include/link.h2
-rw-r--r--include/link_rfu.h10
-rw-r--r--include/load_save.h4
-rw-r--r--include/m4a.h2
-rw-r--r--include/map_name_popup.h2
-rw-r--r--include/map_preview_screen.h1
-rw-r--r--include/metatile_behavior.h2
-rw-r--r--include/overworld.h64
-rw-r--r--include/quest_log.h31
-rw-r--r--include/quest_log_objects.h1
-rw-r--r--include/script.h10
-rw-r--r--include/strings.h4
-rw-r--r--include/vs_seeker.h1
-rw-r--r--ld_script.txt4
-rw-r--r--src/bg_regs.c2
-rw-r--r--src/bike.c2
-rw-r--r--src/cable_club.c6
-rw-r--r--src/credits.c92
-rw-r--r--src/daycare.c2
-rw-r--r--src/diploma.c2
-rw-r--r--src/easy_chat_2.c2
-rw-r--r--src/event_data.c2
-rw-r--r--src/field_effect.c4
-rw-r--r--src/field_fadetransition.c26
-rw-r--r--src/field_player_avatar.c2
-rw-r--r--src/field_screen_effect.c14
-rw-r--r--src/field_specials.c30
-rw-r--r--src/field_tasks.c2
-rw-r--r--src/fieldmap.c6
-rw-r--r--src/heal_location.c2
-rw-r--r--src/item_use.c4
-rw-r--r--src/itemfinder.c6
-rw-r--r--src/learn_move.c2
-rw-r--r--src/link_rfu_2.c14
-rw-r--r--src/link_rfu_3.c6
-rw-r--r--src/load_save.c10
-rw-r--r--src/map_name_popup.c24
-rw-r--r--src/metatile_behavior.c2
-rw-r--r--src/option_menu.c2
-rw-r--r--src/overworld.c3553
-rw-r--r--src/party_menu_specials.c2
-rw-r--r--src/pokemon_jump_2.c2
-rw-r--r--src/post_battle_event_funcs.c4
-rw-r--r--src/quest_log.c14
-rw-r--r--src/region_map.c14
-rw-r--r--src/scrcmd.c2
-rw-r--r--src/script.c18
-rw-r--r--src/seagallop.c2
-rw-r--r--src/strings.c4
-rw-r--r--src/trade.c4
-rw-r--r--src/trade_scene.c2
-rw-r--r--src/vs_seeker.c2
-rw-r--r--sym_bss.txt17
-rw-r--r--sym_common.txt29
-rw-r--r--sym_ewram.txt42
86 files changed, 3923 insertions, 8488 deletions
diff --git a/asm/overworld.s b/asm/overworld.s
deleted file mode 100644
index f840e590a..000000000
--- a/asm/overworld.s
+++ /dev/null
@@ -1,8010 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8054BC8
-sub_8054BC8: @ 8054BC8
- push {r4,lr}
- ldr r0, _08054BFC @ =EventScript_ResetEliteFourEnd
- bl ScriptContext2_RunNewScript
- ldr r0, _08054C00 @ =gSaveBlock1Ptr
- ldr r4, [r0]
- movs r0, 0xA4
- lsls r0, 2
- adds r4, r0
- bl ComputeWhiteOutMoneyLoss
- adds r1, r0, 0
- adds r0, r4, 0
- bl RemoveMoney
- bl HealPlayerParty
- bl sub_8054DD8
- bl sub_80554BC
- bl WarpIntoMap
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08054BFC: .4byte EventScript_ResetEliteFourEnd
-_08054C00: .4byte gSaveBlock1Ptr
- thumb_func_end sub_8054BC8
-
- thumb_func_start ComputeWhiteOutMoneyLoss
-ComputeWhiteOutMoneyLoss: @ 8054C04
- push {r4,lr}
- bl CountBadgesForOverworldWhiteOutLossCalculation
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl GetPlayerPartyHighestLevel
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08054C40 @ =sWhiteOutMoneyLossMultipliers
- adds r4, r1
- ldrb r1, [r4]
- lsls r1, 2
- adds r4, r0, 0
- muls r4, r1
- ldr r0, _08054C44 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xA4
- lsls r1, 2
- adds r0, r1
- bl GetMoney
- cmp r4, r0
- bls _08054C38
- adds r4, r0, 0
-_08054C38:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08054C40: .4byte sWhiteOutMoneyLossMultipliers
-_08054C44: .4byte gSaveBlock1Ptr
- thumb_func_end ComputeWhiteOutMoneyLoss
-
- thumb_func_start OverworldWhiteOutGetMoneyLoss
-OverworldWhiteOutGetMoneyLoss: @ 8054C48
- push {r4,r5,lr}
- bl ComputeWhiteOutMoneyLoss
- adds r4, r0, 0
- ldr r5, _08054C6C @ =gStringVar1
- bl CountDigits
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0
- bl ConvertIntToDecimalStringN
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08054C6C: .4byte gStringVar1
- thumb_func_end OverworldWhiteOutGetMoneyLoss
-
- thumb_func_start CountBadgesForOverworldWhiteOutLossCalculation
-CountBadgesForOverworldWhiteOutLossCalculation: @ 8054C70
- push {r4-r6,lr}
- movs r6, 0
- movs r5, 0
- ldr r4, _08054C9C @ =sWhiteOutMoneyLossBadgeFlagIDs
-_08054C78:
- ldrh r0, [r4]
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _08054C8A
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_08054C8A:
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, 0x7
- bls _08054C78
- adds r0, r6, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08054C9C: .4byte sWhiteOutMoneyLossBadgeFlagIDs
- thumb_func_end CountBadgesForOverworldWhiteOutLossCalculation
-
- thumb_func_start Overworld_ResetStateAfterFly
-Overworld_ResetStateAfterFly: @ 8054CA0
- push {lr}
- bl ResetInitialPlayerAvatarState
- movs r0, 0x83
- lsls r0, 4
- bl FlagClear
- ldr r0, _08054CEC @ =0x0000405e
- movs r1, 0
- bl VarSet
- ldr r0, _08054CF0 @ =0x00000802
- bl FlagClear
- movs r0, 0x80
- lsls r0, 4
- bl FlagClear
- ldr r0, _08054CF4 @ =0x0000406e
- movs r1, 0
- bl VarSet
- ldr r0, _08054CF8 @ =0x00000805
- bl FlagClear
- ldr r0, _08054CFC @ =0x00000806
- bl FlagClear
- ldr r0, _08054D00 @ =0x00000808
- bl FlagClear
- ldr r0, _08054D04 @ =0x0000404d
- movs r1, 0
- bl VarSet
- pop {r0}
- bx r0
- .align 2, 0
-_08054CEC: .4byte 0x0000405e
-_08054CF0: .4byte 0x00000802
-_08054CF4: .4byte 0x0000406e
-_08054CF8: .4byte 0x00000805
-_08054CFC: .4byte 0x00000806
-_08054D00: .4byte 0x00000808
-_08054D04: .4byte 0x0000404d
- thumb_func_end Overworld_ResetStateAfterFly
-
- thumb_func_start Overworld_ResetStateAfterTeleport
-Overworld_ResetStateAfterTeleport: @ 8054D08
- push {lr}
- bl ResetInitialPlayerAvatarState
- movs r0, 0x83
- lsls r0, 4
- bl FlagClear
- ldr r0, _08054D54 @ =0x0000405e
- movs r1, 0
- bl VarSet
- ldr r0, _08054D58 @ =0x00000802
- bl FlagClear
- movs r0, 0x80
- lsls r0, 4
- bl FlagClear
- ldr r0, _08054D5C @ =0x0000406e
- movs r1, 0
- bl VarSet
- ldr r0, _08054D60 @ =0x00000805
- bl FlagClear
- ldr r0, _08054D64 @ =0x00000806
- bl FlagClear
- ldr r0, _08054D68 @ =0x00000808
- bl FlagClear
- ldr r0, _08054D6C @ =0x0000404d
- movs r1, 0
- bl VarSet
- pop {r0}
- bx r0
- .align 2, 0
-_08054D54: .4byte 0x0000405e
-_08054D58: .4byte 0x00000802
-_08054D5C: .4byte 0x0000406e
-_08054D60: .4byte 0x00000805
-_08054D64: .4byte 0x00000806
-_08054D68: .4byte 0x00000808
-_08054D6C: .4byte 0x0000404d
- thumb_func_end Overworld_ResetStateAfterTeleport
-
- thumb_func_start Overworld_ResetStateAfterDigEscRope
-Overworld_ResetStateAfterDigEscRope: @ 8054D70
- push {lr}
- bl ResetInitialPlayerAvatarState
- movs r0, 0x83
- lsls r0, 4
- bl FlagClear
- ldr r0, _08054DBC @ =0x0000405e
- movs r1, 0
- bl VarSet
- ldr r0, _08054DC0 @ =0x00000802
- bl FlagClear
- movs r0, 0x80
- lsls r0, 4
- bl FlagClear
- ldr r0, _08054DC4 @ =0x0000406e
- movs r1, 0
- bl VarSet
- ldr r0, _08054DC8 @ =0x00000805
- bl FlagClear
- ldr r0, _08054DCC @ =0x00000806
- bl FlagClear
- ldr r0, _08054DD0 @ =0x00000808
- bl FlagClear
- ldr r0, _08054DD4 @ =0x0000404d
- movs r1, 0
- bl VarSet
- pop {r0}
- bx r0
- .align 2, 0
-_08054DBC: .4byte 0x0000405e
-_08054DC0: .4byte 0x00000802
-_08054DC4: .4byte 0x0000406e
-_08054DC8: .4byte 0x00000805
-_08054DCC: .4byte 0x00000806
-_08054DD0: .4byte 0x00000808
-_08054DD4: .4byte 0x0000404d
- thumb_func_end Overworld_ResetStateAfterDigEscRope
-
- thumb_func_start sub_8054DD8
-sub_8054DD8: @ 8054DD8
- push {lr}
- bl ResetInitialPlayerAvatarState
- movs r0, 0x83
- lsls r0, 4
- bl FlagClear
- ldr r0, _08054E24 @ =0x0000405e
- movs r1, 0
- bl VarSet
- ldr r0, _08054E28 @ =0x00000802
- bl FlagClear
- movs r0, 0x80
- lsls r0, 4
- bl FlagClear
- ldr r0, _08054E2C @ =0x0000406e
- movs r1, 0
- bl VarSet
- ldr r0, _08054E30 @ =0x00000805
- bl FlagClear
- ldr r0, _08054E34 @ =0x00000806
- bl FlagClear
- ldr r0, _08054E38 @ =0x00000808
- bl FlagClear
- ldr r0, _08054E3C @ =0x0000404d
- movs r1, 0
- bl VarSet
- pop {r0}
- bx r0
- .align 2, 0
-_08054E24: .4byte 0x0000405e
-_08054E28: .4byte 0x00000802
-_08054E2C: .4byte 0x0000406e
-_08054E30: .4byte 0x00000805
-_08054E34: .4byte 0x00000806
-_08054E38: .4byte 0x00000808
-_08054E3C: .4byte 0x0000404d
- thumb_func_end sub_8054DD8
-
- thumb_func_start sub_8054E40
-sub_8054E40: @ 8054E40
- push {lr}
- movs r0, 0x80
- lsls r0, 4
- bl FlagClear
- ldr r0, _08054E64 @ =0x0000406e
- movs r1, 0
- bl VarSet
- bl sub_805610C
- bl UpdateLocationHistoryForRoamer
- bl RoamerMoveToOtherLocationSet
- pop {r0}
- bx r0
- .align 2, 0
-_08054E64: .4byte 0x0000406e
- thumb_func_end sub_8054E40
-
- thumb_func_start ResetGameStats
-ResetGameStats: @ 8054E68
- push {r4,r5,lr}
- movs r2, 0
- ldr r5, _08054E8C @ =gSaveBlock1Ptr
- movs r4, 0x90
- lsls r4, 5
- movs r3, 0
-_08054E74:
- ldr r0, [r5]
- lsls r1, r2, 2
- adds r0, r4
- adds r0, r1
- str r3, [r0]
- adds r2, 0x1
- cmp r2, 0x3F
- ble _08054E74
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08054E8C: .4byte gSaveBlock1Ptr
- thumb_func_end ResetGameStats
-
- thumb_func_start IncrementGameStat
-IncrementGameStat: @ 8054E90
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x33
- bhi _08054EB8
- adds r0, r4, 0
- bl GetGameStat
- adds r1, r0, 0
- ldr r0, _08054EAC @ =0x00fffffe
- cmp r1, r0
- bhi _08054EB0
- adds r1, 0x1
- b _08054EB2
- .align 2, 0
-_08054EAC: .4byte 0x00fffffe
-_08054EB0:
- ldr r1, _08054EC0 @ =0x00ffffff
-_08054EB2:
- adds r0, r4, 0
- bl SetGameStat
-_08054EB8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08054EC0: .4byte 0x00ffffff
- thumb_func_end IncrementGameStat
-
- thumb_func_start GetGameStat
-GetGameStat: @ 8054EC4
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x33
- bhi _08054EF8
- ldr r0, _08054EF0 @ =gSaveBlock1Ptr
- ldr r2, [r0]
- lsls r0, r1, 2
- movs r1, 0x90
- lsls r1, 5
- adds r2, r1
- adds r2, r0
- ldr r0, _08054EF4 @ =gSaveBlock2Ptr
- ldr r1, [r0]
- movs r0, 0xF2
- lsls r0, 4
- adds r1, r0
- ldr r0, [r2]
- ldr r1, [r1]
- eors r0, r1
- b _08054EFA
- .align 2, 0
-_08054EF0: .4byte gSaveBlock1Ptr
-_08054EF4: .4byte gSaveBlock2Ptr
-_08054EF8:
- movs r0, 0
-_08054EFA:
- pop {r1}
- bx r1
- thumb_func_end GetGameStat
-
- thumb_func_start SetGameStat
-SetGameStat: @ 8054F00
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x33
- bhi _08054F2A
- ldr r0, _08054F30 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- lsls r0, r2, 2
- movs r2, 0x90
- lsls r2, 5
- adds r1, r2
- adds r1, r0
- ldr r0, _08054F34 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- movs r2, 0xF2
- lsls r2, 4
- adds r0, r2
- ldr r0, [r0]
- eors r0, r3
- str r0, [r1]
-_08054F2A:
- pop {r0}
- bx r0
- .align 2, 0
-_08054F30: .4byte gSaveBlock1Ptr
-_08054F34: .4byte gSaveBlock2Ptr
- thumb_func_end SetGameStat
-
- thumb_func_start sub_8054F38
-sub_8054F38: @ 8054F38
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r4, 0
- ldr r6, _08054F64 @ =gSaveBlock1Ptr
-_08054F40:
- lsls r1, r4, 2
- movs r0, 0x90
- lsls r0, 5
- adds r1, r0
- ldr r0, [r6]
- adds r0, r1
- adds r1, r5, 0
- bl ApplyNewEncryptionKeyToWord
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3F
- bls _08054F40
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08054F64: .4byte gSaveBlock1Ptr
- thumb_func_end sub_8054F38
-
- thumb_func_start sub_8054F68
-sub_8054F68: @ 8054F68
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r0, 0
- mov r9, r0
- mov r8, r0
- ldr r1, _08055040 @ =gMapHeader
- ldr r0, [r1, 0x4]
- ldrb r0, [r0]
- cmp r9, r0
- bcc _08054F86
- b _08055092
-_08054F86:
- ldr r2, _08055044 @ =gSaveBlock1Ptr
- mov r10, r2
-_08054F8A:
- ldr r3, _08055040 @ =gMapHeader
- ldr r0, [r3, 0x4]
- ldr r1, [r0, 0x4]
- mov r4, r9
- lsls r0, r4, 1
- add r0, r9
- lsls r7, r0, 3
- adds r2, r7, r1
- ldrb r0, [r2, 0x2]
- cmp r0, 0xFF
- bne _08055054
- ldrb r4, [r2, 0x8]
- ldrb r5, [r2, 0xC]
- str r5, [sp]
- ldrb r2, [r2, 0xE]
- str r2, [sp, 0x4]
- adds r0, r2, 0
- adds r1, r5, 0
- bl Overworld_GetMapHeaderByGroupAndId
- mov r6, r10
- ldr r1, [r6]
- mov r2, r8
- lsls r3, r2, 1
- add r3, r8
- lsls r3, 3
- adds r1, r3
- ldr r0, [r0, 0x4]
- ldr r2, [r0, 0x4]
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r0, r2
- movs r5, 0x8E
- lsls r5, 4
- adds r1, r5
- subs r0, 0x18
- ldm r0!, {r2,r5,r6}
- stm r1!, {r2,r5,r6}
- ldm r0!, {r2,r5,r6}
- stm r1!, {r2,r5,r6}
- mov r6, r10
- ldr r1, [r6]
- adds r1, r3
- ldr r2, _08055040 @ =gMapHeader
- ldr r0, [r2, 0x4]
- ldr r0, [r0, 0x4]
- adds r0, r7, r0
- ldrb r0, [r0]
- movs r5, 0x8E
- lsls r5, 4
- adds r1, r5
- strb r0, [r1]
- ldr r1, [r6]
- adds r1, r3
- ldr r0, [r2, 0x4]
- ldr r0, [r0, 0x4]
- adds r0, r7, r0
- ldrh r2, [r0, 0x4]
- ldr r6, _08055048 @ =0x000008e4
- adds r0, r1, r6
- strh r2, [r0]
- ldr r2, _08055040 @ =gMapHeader
- ldr r0, [r2, 0x4]
- ldr r0, [r0, 0x4]
- adds r0, r7, r0
- ldrh r2, [r0, 0x6]
- adds r5, 0x6
- adds r0, r1, r5
- strh r2, [r0]
- adds r6, 0x4
- adds r1, r6
- strb r4, [r1]
- mov r1, r10
- ldr r0, [r1]
- adds r0, r3
- ldr r2, _0805504C @ =0x000008ec
- adds r1, r0, r2
- mov r3, sp
- ldrh r3, [r3]
- strh r3, [r1]
- ldr r4, _08055050 @ =0x000008ee
- adds r1, r0, r4
- mov r5, sp
- ldrh r5, [r5, 0x4]
- strh r5, [r1]
- subs r6, 0x6
- adds r0, r6
- movs r1, 0xFF
- strb r1, [r0]
- b _08055072
- .align 2, 0
-_08055040: .4byte gMapHeader
-_08055044: .4byte gSaveBlock1Ptr
-_08055048: .4byte 0x000008e4
-_0805504C: .4byte 0x000008ec
-_08055050: .4byte 0x000008ee
-_08055054:
- mov r0, r10
- ldr r1, [r0]
- mov r3, r8
- lsls r0, r3, 1
- add r0, r8
- lsls r0, 3
- adds r1, r0
- movs r4, 0x8E
- lsls r4, 4
- adds r1, r4
- adds r0, r2, 0
- ldm r0!, {r2,r5,r6}
- stm r1!, {r2,r5,r6}
- ldm r0!, {r3-r5}
- stm r1!, {r3-r5}
-_08055072:
- mov r0, r8
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r6, _080550A4 @ =gMapHeader
- ldr r0, [r6, 0x4]
- ldrb r0, [r0]
- cmp r9, r0
- bcs _08055092
- b _08054F8A
-_08055092:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080550A4: .4byte gMapHeader
- thumb_func_end sub_8054F68
-
- thumb_func_start sub_80550A8
-sub_80550A8: @ 80550A8
- push {lr}
- ldr r0, _080550D0 @ =gMapHeader
- ldr r1, [r0, 0x4]
- ldr r0, _080550D4 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, [r1, 0x4]
- movs r3, 0x8E
- lsls r3, 4
- adds r1, r0, r3
- movs r3, 0x3F
-_080550BC:
- ldr r0, [r2, 0x10]
- str r0, [r1, 0x10]
- adds r2, 0x18
- adds r1, 0x18
- subs r3, 0x1
- cmp r3, 0
- bge _080550BC
- pop {r0}
- bx r0
- .align 2, 0
-_080550D0: .4byte gMapHeader
-_080550D4: .4byte gSaveBlock1Ptr
- thumb_func_end sub_80550A8
-
- thumb_func_start Overworld_SetMapObjTemplateCoords
-Overworld_SetMapObjTemplateCoords: @ 80550D8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 16
- lsrs r4, r1, 16
- lsls r2, 16
- lsrs r2, 16
- ldr r0, _08055100 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0
- movs r6, 0x8E
- lsls r6, 4
- adds r3, r0, r6
-_080550F2:
- ldrb r0, [r3]
- cmp r0, r5
- bne _08055104
- strh r4, [r3, 0x4]
- strh r2, [r3, 0x6]
- b _0805510C
- .align 2, 0
-_08055100: .4byte gSaveBlock1Ptr
-_08055104:
- adds r3, 0x18
- adds r1, 0x1
- cmp r1, 0x3F
- ble _080550F2
-_0805510C:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end Overworld_SetMapObjTemplateCoords
-
- thumb_func_start Overworld_SetMapObjTemplateMovementType
-Overworld_SetMapObjTemplateMovementType: @ 8055114
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _08055134 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r3, 0
- movs r5, 0x8E
- lsls r5, 4
- adds r2, r0, r5
-_0805512A:
- ldrb r0, [r2]
- cmp r0, r4
- bne _08055138
- strb r1, [r2, 0x9]
- b _08055140
- .align 2, 0
-_08055134: .4byte gSaveBlock1Ptr
-_08055138:
- adds r2, 0x18
- adds r3, 0x1
- cmp r3, 0x3F
- ble _0805512A
-_08055140:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end Overworld_SetMapObjTemplateMovementType
-
- thumb_func_start mapdata_load_assets_to_gpu_and_full_redraw
-mapdata_load_assets_to_gpu_and_full_redraw: @ 8055148
- push {r4,lr}
- bl move_tilemap_camera_to_upper_left_corner
- ldr r4, _0805516C @ =gMapHeader
- ldr r0, [r4]
- bl copy_map_tileset1_tileset2_to_vram
- ldr r0, [r4]
- bl apply_map_tileset1_tileset2_palette
- bl DrawWholeMapView
- bl InitTilesetAnimations
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805516C: .4byte gMapHeader
- thumb_func_end mapdata_load_assets_to_gpu_and_full_redraw
-
- thumb_func_start get_mapdata_header
-get_mapdata_header: @ 8055170
- push {lr}
- ldr r0, _08055180 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x32]
- cmp r1, 0
- bne _08055184
- movs r0, 0
- b _0805518E
- .align 2, 0
-_08055180: .4byte gSaveBlock1Ptr
-_08055184:
- ldr r0, _08055194 @ =gMapLayouts
- subs r1, 0x1
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
-_0805518E:
- pop {r1}
- bx r1
- .align 2, 0
-_08055194: .4byte gMapLayouts
- thumb_func_end get_mapdata_header
-
- thumb_func_start warp_shift
-warp_shift: @ 8055198
- ldr r3, _080551C4 @ =gUnknown_2031DB4
- ldr r0, _080551C8 @ =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r0, [r2, 0x4]
- ldr r1, [r2, 0x8]
- str r0, [r3]
- str r1, [r3, 0x4]
- ldr r0, _080551CC @ =gUnknown_2031DBC
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2, 0x4]
- str r1, [r2, 0x8]
- ldr r2, _080551D0 @ =gUnknown_2031DC4
- ldr r0, _080551D4 @ =sDummyWarpData
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- ldr r2, _080551D8 @ =gUnknown_2031DCC
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .align 2, 0
-_080551C4: .4byte gUnknown_2031DB4
-_080551C8: .4byte gSaveBlock1Ptr
-_080551CC: .4byte gUnknown_2031DBC
-_080551D0: .4byte gUnknown_2031DC4
-_080551D4: .4byte sDummyWarpData
-_080551D8: .4byte gUnknown_2031DCC
- thumb_func_end warp_shift
-
- thumb_func_start warp_set
-warp_set: @ 80551DC
- push {r4,r5,lr}
- ldr r4, [sp, 0xC]
- ldr r5, [sp, 0x10]
- strb r1, [r0]
- strb r2, [r0, 0x1]
- strb r3, [r0, 0x2]
- lsls r4, 24
- asrs r4, 24
- strh r4, [r0, 0x4]
- lsls r5, 24
- asrs r5, 24
- strh r5, [r0, 0x6]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end warp_set
-
- thumb_func_start warp_data_is_not_neg_1
-warp_data_is_not_neg_1: @ 80551FC
- push {lr}
- adds r1, r0, 0
- movs r2, 0
- ldrsb r2, [r1, r2]
- movs r0, 0x1
- negs r0, r0
- cmp r2, r0
- bne _08055230
- movs r0, 0x1
- ldrsb r0, [r1, r0]
- cmp r0, r2
- bne _08055230
- movs r2, 0x2
- ldrsb r2, [r1, r2]
- cmp r2, r0
- bne _08055230
- movs r0, 0x4
- ldrsh r3, [r1, r0]
- cmp r3, r2
- bne _08055230
- movs r2, 0x6
- ldrsh r0, [r1, r2]
- cmp r0, r3
- bne _08055230
- movs r0, 0x1
- b _08055232
-_08055230:
- movs r0, 0
-_08055232:
- pop {r1}
- bx r1
- thumb_func_end warp_data_is_not_neg_1
-
- thumb_func_start Overworld_GetMapHeaderByGroupAndId
-Overworld_GetMapHeaderByGroupAndId: @ 8055238
- lsls r0, 16
- lsls r1, 16
- ldr r2, _0805524C @ =gMapGroups
- lsrs r0, 14
- adds r0, r2
- ldr r0, [r0]
- lsrs r1, 14
- adds r1, r0
- ldr r0, [r1]
- bx lr
- .align 2, 0
-_0805524C: .4byte gMapGroups
- thumb_func_end Overworld_GetMapHeaderByGroupAndId
-
- thumb_func_start warp1_get_mapheader
-warp1_get_mapheader: @ 8055250
- push {lr}
- ldr r1, _08055270 @ =gUnknown_2031DBC
- movs r0, 0
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x1]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl Overworld_GetMapHeaderByGroupAndId
- pop {r1}
- bx r1
- .align 2, 0
-_08055270: .4byte gUnknown_2031DBC
- thumb_func_end warp1_get_mapheader
-
- thumb_func_start set_current_map_header_from_sav1_save_old_name
-set_current_map_header_from_sav1_save_old_name: @ 8055274
- push {r4-r6,lr}
- ldr r4, _080552B4 @ =gMapHeader
- ldr r5, _080552B8 @ =gSaveBlock1Ptr
- ldr r1, [r5]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl Overworld_GetMapHeaderByGroupAndId
- adds r1, r4, 0
- ldm r0!, {r2,r3,r6}
- stm r1!, {r2,r3,r6}
- ldm r0!, {r2,r3,r6}
- stm r1!, {r2,r3,r6}
- ldr r0, [r0]
- str r0, [r1]
- ldr r1, [r5]
- ldrh r0, [r4, 0x12]
- strh r0, [r1, 0x32]
- bl get_mapdata_header
- str r0, [r4]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080552B4: .4byte gMapHeader
-_080552B8: .4byte gSaveBlock1Ptr
- thumb_func_end set_current_map_header_from_sav1_save_old_name
-
- thumb_func_start set_current_map_header_from_sav1
-set_current_map_header_from_sav1: @ 80552BC
- push {r4,r5,lr}
- ldr r4, _080552F4 @ =gMapHeader
- ldr r0, _080552F8 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl Overworld_GetMapHeaderByGroupAndId
- adds r1, r4, 0
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldr r0, [r0]
- str r0, [r1]
- bl get_mapdata_header
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080552F4: .4byte gMapHeader
-_080552F8: .4byte gSaveBlock1Ptr
- thumb_func_end set_current_map_header_from_sav1
-
- thumb_func_start update_camera_pos_from_warpid
-update_camera_pos_from_warpid: @ 80552FC
- push {r4,r5,lr}
- ldr r0, _0805532C @ =gSaveBlock1Ptr
- ldr r2, [r0]
- movs r1, 0x6
- ldrsb r1, [r2, r1]
- adds r4, r0, 0
- cmp r1, 0
- blt _08055334
- ldr r3, _08055330 @ =gMapHeader
- ldr r0, [r3, 0x4]
- ldrb r5, [r0, 0x1]
- cmp r1, r5
- bge _08055334
- ldr r0, [r0, 0x8]
- lsls r1, 3
- adds r0, r1, r0
- ldrh r0, [r0]
- strh r0, [r2]
- ldr r0, [r3, 0x4]
- ldr r0, [r0, 0x8]
- adds r1, r0
- ldrh r0, [r1, 0x2]
- strh r0, [r2, 0x2]
- b _0805536C
- .align 2, 0
-_0805532C: .4byte gSaveBlock1Ptr
-_08055330: .4byte gMapHeader
-_08055334:
- ldr r1, [r4]
- ldrh r3, [r1, 0x8]
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0
- blt _08055350
- ldrh r2, [r1, 0xA]
- movs r5, 0xA
- ldrsh r0, [r1, r5]
- cmp r0, 0
- blt _08055350
- strh r3, [r1]
- strh r2, [r1, 0x2]
- b _0805536C
-_08055350:
- ldr r3, [r4]
- ldr r2, _08055374 @ =gMapHeader
- ldr r0, [r2]
- ldr r0, [r0]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- strh r0, [r3]
- ldr r0, [r2]
- ldr r0, [r0, 0x4]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- strh r0, [r3, 0x2]
-_0805536C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08055374: .4byte gMapHeader
- thumb_func_end update_camera_pos_from_warpid
-
- thumb_func_start WarpIntoMap
-WarpIntoMap: @ 8055378
- push {lr}
- bl warp_shift
- bl set_current_map_header_from_sav1_save_old_name
- bl update_camera_pos_from_warpid
- pop {r0}
- bx r0
- thumb_func_end WarpIntoMap
-
- thumb_func_start SetWarpDestination
-SetWarpDestination: @ 805538C
- push {r4-r6,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- ldr r1, [sp, 0x18]
- ldr r0, _080553C4 @ =gUnknown_2031DBC
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- lsls r3, 24
- asrs r3, 24
- str r3, [sp]
- lsls r1, 24
- asrs r1, 24
- str r1, [sp, 0x4]
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl warp_set
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080553C4: .4byte gUnknown_2031DBC
- thumb_func_end SetWarpDestination
-
- thumb_func_start SetWarpDestinationToMapWarp
-SetWarpDestinationToMapWarp: @ 80553C8
- push {lr}
- sub sp, 0x4
- lsls r0, 24
- asrs r0, 24
- lsls r1, 24
- asrs r1, 24
- lsls r2, 24
- asrs r2, 24
- movs r3, 0x1
- negs r3, r3
- str r3, [sp]
- bl SetWarpDestination
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end SetWarpDestinationToMapWarp
-
- thumb_func_start SetDynamicWarp
-SetDynamicWarp: @ 80553E8
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r0, _08055418 @ =gSaveBlock1Ptr
- ldr r5, [r0]
- adds r0, r5, 0
- adds r0, 0x14
- lsls r1, 24
- asrs r1, 24
- lsls r2, 24
- asrs r2, 24
- lsls r3, 24
- asrs r3, 24
- movs r4, 0
- ldrsb r4, [r5, r4]
- str r4, [sp]
- movs r4, 0x2
- ldrsb r4, [r5, r4]
- str r4, [sp, 0x4]
- bl warp_set
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08055418: .4byte gSaveBlock1Ptr
- thumb_func_end SetDynamicWarp
-
- thumb_func_start SetDynamicWarpWithCoords
-SetDynamicWarpWithCoords: @ 805541C
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r4, [sp, 0x14]
- ldr r5, [sp, 0x18]
- ldr r0, _08055450 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x14
- lsls r1, 24
- asrs r1, 24
- lsls r2, 24
- asrs r2, 24
- lsls r3, 24
- asrs r3, 24
- lsls r4, 24
- asrs r4, 24
- str r4, [sp]
- lsls r5, 24
- asrs r5, 24
- str r5, [sp, 0x4]
- bl warp_set
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08055450: .4byte gSaveBlock1Ptr
- thumb_func_end SetDynamicWarpWithCoords
-
- thumb_func_start SetWarpDestinationToDynamicWarp
-SetWarpDestinationToDynamicWarp: @ 8055454
- ldr r2, _08055464 @ =gUnknown_2031DBC
- ldr r0, _08055468 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, [r0, 0x18]
- ldr r0, [r0, 0x14]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .align 2, 0
-_08055464: .4byte gUnknown_2031DBC
-_08055468: .4byte gSaveBlock1Ptr
- thumb_func_end SetWarpDestinationToDynamicWarp
-
- thumb_func_start sub_805546C
-sub_805546C: @ 805546C
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- bl GetHealLocationPointer
- adds r4, r0, 0
- cmp r4, 0
- beq _0805549A
- movs r0, 0
- ldrsb r0, [r4, r0]
- movs r1, 0x1
- ldrsb r1, [r4, r1]
- movs r2, 0x1
- negs r2, r2
- movs r3, 0x2
- ldrsb r3, [r4, r3]
- ldrb r4, [r4, 0x4]
- lsls r4, 24
- asrs r4, 24
- str r4, [sp]
- bl SetWarpDestination
-_0805549A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_805546C
-
- thumb_func_start copy_saved_warp3_bank_and_enter_x_to_warp1
-copy_saved_warp3_bank_and_enter_x_to_warp1: @ 80554A4
- ldr r2, _080554B4 @ =gUnknown_2031DBC
- ldr r0, _080554B8 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, [r0, 0x20]
- ldr r0, [r0, 0x1C]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .align 2, 0
-_080554B4: .4byte gUnknown_2031DBC
-_080554B8: .4byte gSaveBlock1Ptr
- thumb_func_end copy_saved_warp3_bank_and_enter_x_to_warp1
-
- thumb_func_start sub_80554BC
-sub_80554BC: @ 80554BC
- push {lr}
- ldr r0, _080554C8 @ =gUnknown_2031DBC
- bl SetWhiteoutRespawnWarpAndHealerNpc
- pop {r0}
- bx r0
- .align 2, 0
-_080554C8: .4byte gUnknown_2031DBC
- thumb_func_end sub_80554BC
-
- thumb_func_start SetLastHealLocationWarp
-SetLastHealLocationWarp: @ 80554CC
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- bl GetHealLocationPointer
- adds r5, r0, 0
- cmp r5, 0
- beq _08055500
- ldr r0, _08055508 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x1C
- movs r1, 0
- ldrsb r1, [r5, r1]
- movs r2, 0x1
- ldrsb r2, [r5, r2]
- movs r3, 0x1
- negs r3, r3
- movs r4, 0x2
- ldrsb r4, [r5, r4]
- str r4, [sp]
- movs r4, 0x4
- ldrsb r4, [r5, r4]
- str r4, [sp, 0x4]
- bl warp_set
-_08055500:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08055508: .4byte gSaveBlock1Ptr
- thumb_func_end SetLastHealLocationWarp
-
- thumb_func_start UpdateEscapeWarp
-UpdateEscapeWarp: @ 805550C
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 16
- lsrs r7, r1, 16
- bl GetCurrentMapType
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _08055598 @ =gUnknown_2031DBC
- movs r0, 0
- ldrsb r0, [r1, r0]
- ldrb r1, [r1, 0x1]
- lsls r1, 24
- asrs r1, 24
- bl get_map_light_level_by_bank_and_number
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r4, 0
- bl IsMapTypeOutdoors
- lsls r0, 24
- cmp r0, 0
- beq _08055590
- adds r0, r5, 0
- bl IsMapTypeOutdoors
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055590
- ldr r5, _0805559C @ =gSaveBlock1Ptr
- ldr r0, [r5]
- ldrh r0, [r0, 0x4]
- cmp r0, 0x1
- beq _08055590
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- eors r0, r1
- negs r4, r0
- orrs r4, r0
- ldr r1, [r5]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- movs r2, 0x1
- negs r2, r2
- subs r3, r6, 0x7
- lsls r3, 24
- asrs r3, 24
- lsrs r4, 31
- subs r4, 0x7
- adds r4, r7, r4
- lsls r4, 24
- asrs r4, 24
- str r4, [sp]
- bl SetEscapeWarp
-_08055590:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08055598: .4byte gUnknown_2031DBC
-_0805559C: .4byte gSaveBlock1Ptr
- thumb_func_end UpdateEscapeWarp
-
- thumb_func_start SetEscapeWarp
-SetEscapeWarp: @ 80555A0
- push {r4-r6,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- ldr r1, [sp, 0x18]
- ldr r0, _080555DC @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x24
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- lsls r3, 24
- asrs r3, 24
- str r3, [sp]
- lsls r1, 24
- asrs r1, 24
- str r1, [sp, 0x4]
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl warp_set
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080555DC: .4byte gSaveBlock1Ptr
- thumb_func_end SetEscapeWarp
-
- thumb_func_start sub_80555E0
-sub_80555E0: @ 80555E0
- ldr r2, _080555F0 @ =gUnknown_2031DBC
- ldr r0, _080555F4 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, [r0, 0x28]
- ldr r0, [r0, 0x24]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .align 2, 0
-_080555F0: .4byte gUnknown_2031DBC
-_080555F4: .4byte gSaveBlock1Ptr
- thumb_func_end sub_80555E0
-
- thumb_func_start SetFixedDiveWarp
-SetFixedDiveWarp: @ 80555F8
- push {r4-r6,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- ldr r1, [sp, 0x18]
- ldr r0, _08055630 @ =gUnknown_2031DC4
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- lsls r3, 24
- asrs r3, 24
- str r3, [sp]
- lsls r1, 24
- asrs r1, 24
- str r1, [sp, 0x4]
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl warp_set
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08055630: .4byte gUnknown_2031DC4
- thumb_func_end SetFixedDiveWarp
-
- thumb_func_start warp1_set_to_warp2
-warp1_set_to_warp2: @ 8055634
- ldr r2, _08055644 @ =gUnknown_2031DBC
- ldr r0, _08055648 @ =gUnknown_2031DC4
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .align 2, 0
-_08055644: .4byte gUnknown_2031DBC
-_08055648: .4byte gUnknown_2031DC4
- thumb_func_end warp1_set_to_warp2
-
- thumb_func_start SetFixedHoleWarp
-SetFixedHoleWarp: @ 805564C
- push {r4-r6,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- ldr r1, [sp, 0x18]
- ldr r0, _08055684 @ =gUnknown_2031DCC
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- lsls r3, 24
- asrs r3, 24
- str r3, [sp]
- lsls r1, 24
- asrs r1, 24
- str r1, [sp, 0x4]
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl warp_set
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08055684: .4byte gUnknown_2031DCC
- thumb_func_end SetFixedHoleWarp
-
- thumb_func_start SetWarpDestinationToFixedHoleWarp
-SetWarpDestinationToFixedHoleWarp: @ 8055688
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r1, 16
- lsrs r6, r1, 16
- ldr r4, _080556B0 @ =gUnknown_2031DCC
- adds r0, r4, 0
- bl warp_data_is_not_neg_1
- cmp r0, 0x1
- bne _080556BC
- ldr r2, _080556B4 @ =gUnknown_2031DBC
- ldr r0, _080556B8 @ =gUnknown_2031DB4
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- b _080556D6
- .align 2, 0
-_080556B0: .4byte gUnknown_2031DCC
-_080556B4: .4byte gUnknown_2031DBC
-_080556B8: .4byte gUnknown_2031DB4
-_080556BC:
- movs r0, 0
- ldrsb r0, [r4, r0]
- movs r1, 0x1
- ldrsb r1, [r4, r1]
- movs r2, 0x1
- negs r2, r2
- lsls r3, r5, 24
- asrs r3, 24
- lsls r4, r6, 24
- asrs r4, 24
- str r4, [sp]
- bl SetWarpDestination
-_080556D6:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end SetWarpDestinationToFixedHoleWarp
-
- thumb_func_start warp1_set_to_sav1w
-warp1_set_to_sav1w: @ 80556E0
- ldr r2, _080556F0 @ =gUnknown_2031DBC
- ldr r0, _080556F4 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, [r0, 0x10]
- ldr r0, [r0, 0xC]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .align 2, 0
-_080556F0: .4byte gUnknown_2031DBC
-_080556F4: .4byte gSaveBlock1Ptr
- thumb_func_end warp1_set_to_sav1w
-
- thumb_func_start sub_80556F8
-sub_80556F8: @ 80556F8
- push {r4-r6,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- ldr r1, [sp, 0x18]
- ldr r0, _08055734 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0xC
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- lsls r3, 24
- asrs r3, 24
- str r3, [sp]
- lsls r1, 24
- asrs r1, 24
- str r1, [sp, 0x4]
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl warp_set
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08055734: .4byte gSaveBlock1Ptr
- thumb_func_end sub_80556F8
-
- thumb_func_start sub_8055738
-sub_8055738: @ 8055738
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- bl GetHealLocationPointer
- adds r5, r0, 0
- cmp r5, 0
- beq _0805576C
- ldr r0, _08055774 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0xC
- movs r1, 0
- ldrsb r1, [r5, r1]
- movs r2, 0x1
- ldrsb r2, [r5, r2]
- movs r3, 0x1
- negs r3, r3
- movs r4, 0x2
- ldrsb r4, [r5, r4]
- str r4, [sp]
- movs r4, 0x4
- ldrsb r4, [r5, r4]
- str r4, [sp, 0x4]
- bl warp_set
-_0805576C:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08055774: .4byte gSaveBlock1Ptr
- thumb_func_end sub_8055738
-
- thumb_func_start sub_8055778
-sub_8055778: @ 8055778
- ldr r0, _08055788 @ =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r0, [r2, 0x14]
- ldr r1, [r2, 0x18]
- str r0, [r2, 0xC]
- str r1, [r2, 0x10]
- bx lr
- .align 2, 0
-_08055788: .4byte gSaveBlock1Ptr
- thumb_func_end sub_8055778
-
- thumb_func_start GetMapConnection
-GetMapConnection: @ 805578C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080557A0 @ =gMapHeader
- ldr r0, [r0, 0xC]
- ldr r3, [r0]
- ldr r1, [r0, 0x4]
- cmp r1, 0
- bne _080557A8
- b _080557BC
- .align 2, 0
-_080557A0: .4byte gMapHeader
-_080557A4:
- adds r0, r1, 0
- b _080557BE
-_080557A8:
- movs r2, 0
- cmp r2, r3
- bge _080557BC
-_080557AE:
- ldrb r0, [r1]
- cmp r0, r4
- beq _080557A4
- adds r2, 0x1
- adds r1, 0xC
- cmp r2, r3
- blt _080557AE
-_080557BC:
- movs r0, 0
-_080557BE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetMapConnection
-
- thumb_func_start sub_80557C4
-sub_80557C4: @ 80557C4
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r4, r1, 16
- lsls r2, 16
- lsrs r5, r2, 16
- bl GetMapConnection
- adds r1, r0, 0
- cmp r1, 0
- beq _080557FC
- movs r0, 0x8
- ldrsb r0, [r1, r0]
- ldrb r1, [r1, 0x9]
- lsls r1, 24
- asrs r1, 24
- movs r2, 0x1
- negs r2, r2
- lsls r3, r4, 24
- asrs r3, 24
- lsls r4, r5, 24
- asrs r4, 24
- str r4, [sp]
- bl SetWarpDestination
- b _08055818
-_080557FC:
- bl mapheader_run_script_with_tag_x6
- ldr r0, _08055810 @ =gUnknown_2031DC4
- bl warp_data_is_not_neg_1
- cmp r0, 0
- beq _08055814
- movs r0, 0
- b _0805581A
- .align 2, 0
-_08055810: .4byte gUnknown_2031DC4
-_08055814:
- bl warp1_set_to_warp2
-_08055818:
- movs r0, 0x1
-_0805581A:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80557C4
-
- thumb_func_start SetDiveWarpEmerge
-SetDiveWarpEmerge: @ 8055824
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- lsls r3, 16
- lsrs r3, 16
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x6
- adds r1, r3, 0
- bl sub_80557C4
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end SetDiveWarpEmerge
-
- thumb_func_start SetDiveWarpDive
-SetDiveWarpDive: @ 8055844
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- lsls r3, 16
- lsrs r3, 16
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x5
- adds r1, r3, 0
- bl sub_80557C4
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end SetDiveWarpDive
-
- thumb_func_start sub_8055864
-sub_8055864: @ 8055864
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsls r1, 24
- lsrs r5, r0, 24
- asrs r0, 24
- lsrs r4, r1, 24
- asrs r1, 24
- movs r3, 0x1
- negs r3, r3
- str r3, [sp]
- adds r2, r3, 0
- bl SetWarpDestination
- bl sub_8055E94
- bl warp_shift
- bl set_current_map_header_from_sav1_save_old_name
- bl sub_8054F68
- bl TrySetMapSaveWarpStatus
- bl sub_806E110
- bl nullsub_74
- bl RestartWildEncounterImmunitySteps
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_810C578
- bl SetSav1WeatherFromCurrMapHeader
- bl sub_805610C
- bl sub_8055CB8
- bl Overworld_ClearSavedMusic
- bl mapheader_run_script_with_tag_x3
- bl TryRegenerateRenewableHiddenItems
- bl InitMap
- ldr r4, _0805591C @ =gMapHeader
- ldr r0, [r4]
- bl copy_map_tileset2_to_vram_2
- ldr r0, [r4]
- bl apply_map_tileset2_palette
- movs r4, 0x7
-_080558D4:
- lsls r0, r4, 24
- lsrs r0, 24
- bl ApplyWeatherGammaShiftToPal
- adds r4, 0x1
- cmp r4, 0xC
- ble _080558D4
- bl InitSecondaryTilesetAnimation
- bl UpdateLocationHistoryForRoamer
- bl RoamerMove
- bl sub_8110920
- bl DoCurrentWeather
- bl ResetFieldTasksArgs
- bl mapheader_run_script_with_tag_x5
- bl GetLastUsedWarpMapSectionId
- ldr r1, _0805591C @ =gMapHeader
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1, 0x14]
- cmp r0, r1
- beq _08055914
- movs r0, 0x1
- bl CreateMapNamePopupIfNotAlreadyRunning
-_08055914:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805591C: .4byte gMapHeader
- thumb_func_end sub_8055864
-
- thumb_func_start sub_8055920
-sub_8055920: @ 8055920
- push {r4,lr}
- bl set_current_map_header_from_sav1_save_old_name
- bl sub_8054F68
- ldr r0, _0805599C @ =gMapHeader
- ldrb r0, [r0, 0x17]
- bl IsMapTypeOutdoors
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl TrySetMapSaveWarpStatus
- bl sub_806E110
- bl nullsub_74
- bl RestartWildEncounterImmunitySteps
- ldr r0, _080559A0 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl sub_810C578
- bl SetSav1WeatherFromCurrMapHeader
- bl sub_805610C
- cmp r4, 0
- beq _08055974
- ldr r0, _080559A4 @ =0x00000806
- bl FlagClear
-_08055974:
- bl sub_8055CB8
- bl Overworld_ClearSavedMusic
- bl mapheader_run_script_with_tag_x3
- bl TryRegenerateRenewableHiddenItems
- bl UpdateLocationHistoryForRoamer
- bl RoamerMoveToOtherLocationSet
- bl sub_8110920
- bl InitMap
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805599C: .4byte gMapHeader
-_080559A0: .4byte gSaveBlock1Ptr
-_080559A4: .4byte 0x00000806
- thumb_func_end sub_8055920
-
- thumb_func_start sub_80559A8
-sub_80559A8: @ 80559A8
- push {lr}
- bl set_current_map_header_from_sav1_save_old_name
- bl sub_8054F68
- ldr r0, _080559E0 @ =gMapHeader
- ldrb r0, [r0, 0x17]
- bl IsMapTypeOutdoors
- bl TrySetMapSaveWarpStatus
- bl SetSav1WeatherFromCurrMapHeader
- bl sub_805610C
- bl sub_8055CB8
- bl sub_8110920
- bl sub_8111708
- bl set_current_map_header_from_sav1
- bl InitMap
- pop {r0}
- bx r0
- .align 2, 0
-_080559E0: .4byte gMapHeader
- thumb_func_end sub_80559A8
-
- thumb_func_start ResetInitialPlayerAvatarState
-ResetInitialPlayerAvatarState: @ 80559E4
- ldr r0, _080559F4 @ =gUnknown_2031DD4
- movs r2, 0
- movs r1, 0x1
- strb r1, [r0, 0x1]
- strb r1, [r0]
- strb r2, [r0, 0x2]
- bx lr
- .align 2, 0
-_080559F4: .4byte gUnknown_2031DD4
- thumb_func_end ResetInitialPlayerAvatarState
-
- thumb_func_start sub_80559F8
-sub_80559F8: @ 80559F8
- ldr r1, _08055A04 @ =gUnknown_2031DD4
- strb r0, [r1, 0x1]
- movs r0, 0x1
- strb r0, [r1]
- strb r0, [r1, 0x2]
- bx lr
- .align 2, 0
-_08055A04: .4byte gUnknown_2031DD4
- thumb_func_end sub_80559F8
-
- thumb_func_start StoreInitialPlayerAvatarState
-StoreInitialPlayerAvatarState: @ 8055A08
- push {r4,lr}
- bl GetPlayerFacingDirection
- ldr r4, _08055A24 @ =gUnknown_2031DD4
- strb r0, [r4, 0x1]
- movs r0, 0x2
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08055A28
- movs r0, 0x2
- b _08055A5A
- .align 2, 0
-_08055A24: .4byte gUnknown_2031DD4
-_08055A28:
- movs r0, 0x4
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08055A38
- movs r0, 0x4
- b _08055A5A
-_08055A38:
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08055A48
- movs r0, 0x8
- b _08055A5A
-_08055A48:
- movs r0, 0x10
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08055A58
- movs r0, 0x10
- b _08055A5A
-_08055A58:
- movs r0, 0x1
-_08055A5A:
- strb r0, [r4]
- ldr r1, _08055A68 @ =gUnknown_2031DD4
- movs r0, 0
- strb r0, [r1, 0x2]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08055A68: .4byte gUnknown_2031DD4
- thumb_func_end StoreInitialPlayerAvatarState
-
- thumb_func_start sub_8055A6C
-sub_8055A6C: @ 8055A6C
- push {r4-r7,lr}
- bl GetCurrentMapType
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- bl sub_8055C74
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r6, _08055ABC @ =gUnknown_2031DD4
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl sub_8055ACC
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _08055AC0 @ =0xffffff00
- ands r7, r0
- orrs r7, r1
- adds r0, r6, 0
- adds r2, r4, 0
- adds r3, r5, 0
- bl sub_8055B74
- lsls r0, 24
- lsrs r0, 16
- ldr r1, _08055AC4 @ =0xffff00ff
- ands r7, r1
- orrs r7, r0
- ldr r0, _08055AC8 @ =0xff00ffff
- ands r7, r0
- str r7, [r6]
- adds r0, r6, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08055ABC: .4byte gUnknown_2031DD4
-_08055AC0: .4byte 0xffffff00
-_08055AC4: .4byte 0xffff00ff
-_08055AC8: .4byte 0xff00ffff
- thumb_func_end sub_8055A6C
-
- thumb_func_start sub_8055ACC
-sub_8055ACC: @ 8055ACC
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r5, r1, 16
- lsls r2, 24
- lsrs r4, r2, 24
- cmp r4, 0x8
- beq _08055AE8
- ldr r0, _08055AF0 @ =0x00000802
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _08055B30
-_08055AE8:
- cmp r4, 0x5
- bne _08055AF4
- movs r0, 0x10
- b _08055B32
- .align 2, 0
-_08055AF0: .4byte 0x00000802
-_08055AF4:
- adds r0, r5, 0
- bl sub_8055B38
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055B30
- lsls r0, r5, 24
- lsrs r0, 24
- bl MetatileBehavior_IsSurfable
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08055B16
- movs r0, 0x8
- b _08055B32
-_08055B16:
- bl sub_8055C9C
- cmp r0, 0x1
- bne _08055B30
- ldrb r0, [r6]
- cmp r0, 0x2
- bne _08055B28
- movs r0, 0x2
- b _08055B32
-_08055B28:
- cmp r0, 0x4
- bne _08055B30
- movs r0, 0x4
- b _08055B32
-_08055B30:
- movs r0, 0x1
-_08055B32:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8055ACC
-
- thumb_func_start sub_8055B38
-sub_8055B38: @ 8055B38
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsSurfable
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08055B6C
- ldr r0, _08055B60 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- ldr r0, _08055B64 @ =0x00005601
- cmp r1, r0
- beq _08055B5C
- ldr r0, _08055B68 @ =0x00005701
- cmp r1, r0
- bne _08055B6C
-_08055B5C:
- movs r0, 0x1
- b _08055B6E
- .align 2, 0
-_08055B60: .4byte gSaveBlock1Ptr
-_08055B64: .4byte 0x00005601
-_08055B68: .4byte 0x00005701
-_08055B6C:
- movs r0, 0
-_08055B6E:
- pop {r1}
- bx r1
- thumb_func_end sub_8055B38
-
- thumb_func_start sub_8055B74
-sub_8055B74: @ 8055B74
- push {r4-r7,lr}
- adds r6, r0, 0
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 16
- lsrs r4, r2, 16
- lsls r3, 24
- lsrs r5, r3, 24
- ldr r0, _08055BD4 @ =0x00000802
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _08055B94
- cmp r5, 0x6
- beq _08055C3E
-_08055B94:
- lsls r4, 24
- lsrs r5, r4, 24
- adds r0, r5, 0
- bl MetatileBehavior_ReturnFalse_2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055BD0
- adds r0, r5, 0
- bl MetatileBehavior_IsNonAnimDoor
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C68
- adds r0, r5, 0
- bl MetatileBehavior_IsWarpDoor_2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C68
- adds r0, r5, 0
- bl MetatileBehavior_IsSouthArrowWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08055BD8
-_08055BD0:
- movs r0, 0x2
- b _08055C6E
- .align 2, 0
-_08055BD4: .4byte 0x00000802
-_08055BD8:
- adds r0, r5, 0
- bl MetatileBehavior_IsNorthArrowWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C68
- adds r0, r5, 0
- bl MetatileBehavior_IsWestArrowWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C3E
- adds r0, r5, 0
- bl MetatileBehavior_IsEastArrowWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C1E
- adds r0, r5, 0
- bl MetatileBehavior_IsUnknownWarp6C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C1E
- adds r0, r5, 0
- bl MetatileBehavior_IsUnknownWarp6E
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08055C22
-_08055C1E:
- movs r0, 0x3
- b _08055C6E
-_08055C22:
- adds r0, r5, 0
- bl MetatileBehavior_IsUnknownWarp6D
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C3E
- adds r0, r5, 0
- bl MetatileBehavior_IsUnknownWarp6F
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08055C42
-_08055C3E:
- movs r0, 0x4
- b _08055C6E
-_08055C42:
- ldrb r0, [r6]
- cmp r0, 0x10
- bne _08055C4C
- cmp r7, 0x8
- beq _08055C6C
-_08055C4C:
- cmp r0, 0x8
- bne _08055C54
- cmp r7, 0x10
- beq _08055C6C
-_08055C54:
- lsrs r0, r4, 24
- bl MetatileBehavior_IsLadder
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C6C
- ldrb r0, [r6, 0x2]
- cmp r0, 0
- bne _08055C6C
-_08055C68:
- movs r0, 0x1
- b _08055C6E
-_08055C6C:
- ldrb r0, [r6, 0x1]
-_08055C6E:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8055B74
-
- thumb_func_start sub_8055C74
-sub_8055C74: @ 8055C74
- push {lr}
- ldr r0, _08055C98 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- ldrh r0, [r1]
- adds r0, 0x7
- lsls r0, 16
- asrs r0, 16
- ldrh r1, [r1, 0x2]
- adds r1, 0x7
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_08055C98: .4byte gSaveBlock1Ptr
- thumb_func_end sub_8055C74
-
- thumb_func_start sub_8055C9C
-sub_8055C9C: @ 8055C9C
- push {lr}
- ldr r0, _08055CAC @ =gMapHeader
- ldrb r0, [r0, 0x18]
- cmp r0, 0
- beq _08055CB0
- movs r0, 0x1
- b _08055CB2
- .align 2, 0
-_08055CAC: .4byte gMapHeader
-_08055CB0:
- movs r0, 0
-_08055CB2:
- pop {r1}
- bx r1
- thumb_func_end sub_8055C9C
-
- thumb_func_start sub_8055CB8
-sub_8055CB8: @ 8055CB8
- push {lr}
- ldr r0, _08055CC8 @ =gMapHeader
- ldrb r1, [r0, 0x15]
- cmp r1, 0
- bne _08055CD0
- ldr r0, _08055CCC @ =gSaveBlock1Ptr
- ldr r0, [r0]
- b _08055CF8
- .align 2, 0
-_08055CC8: .4byte gMapHeader
-_08055CCC: .4byte gSaveBlock1Ptr
-_08055CD0:
- ldr r0, _08055CE8 @ =0x00000806
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _08055CF0
- ldr r0, _08055CEC @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x30
- movs r1, 0
- b _08055CFA
- .align 2, 0
-_08055CE8: .4byte 0x00000806
-_08055CEC: .4byte gSaveBlock1Ptr
-_08055CF0:
- ldr r0, _08055D00 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _08055D04 @ =gMaxFlashLevel
- ldr r1, [r1]
-_08055CF8:
- adds r0, 0x30
-_08055CFA:
- strb r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_08055D00: .4byte gSaveBlock1Ptr
-_08055D04: .4byte gMaxFlashLevel
- thumb_func_end sub_8055CB8
-
- thumb_func_start Overworld_SetFlashLevel
-Overworld_SetFlashLevel: @ 8055D08
- push {lr}
- adds r1, r0, 0
- cmp r1, 0
- blt _08055D18
- ldr r0, _08055D28 @ =gMaxFlashLevel
- ldr r0, [r0]
- cmp r1, r0
- ble _08055D1A
-_08055D18:
- movs r1, 0
-_08055D1A:
- ldr r0, _08055D2C @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x30
- strb r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_08055D28: .4byte gMaxFlashLevel
-_08055D2C: .4byte gSaveBlock1Ptr
- thumb_func_end Overworld_SetFlashLevel
-
- thumb_func_start Overworld_GetFlashLevel
-Overworld_GetFlashLevel: @ 8055D30
- ldr r0, _08055D3C @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x30
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_08055D3C: .4byte gSaveBlock1Ptr
- thumb_func_end Overworld_GetFlashLevel
-
- thumb_func_start SetCurrentMapLayout
-SetCurrentMapLayout: @ 8055D40
- push {lr}
- ldr r1, _08055D54 @ =gSaveBlock1Ptr
- ldr r1, [r1]
- strh r0, [r1, 0x32]
- bl get_mapdata_header
- ldr r1, _08055D58 @ =gMapHeader
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08055D54: .4byte gSaveBlock1Ptr
-_08055D58: .4byte gMapHeader
- thumb_func_end SetCurrentMapLayout
-
- thumb_func_start sub_8055D5C
-sub_8055D5C: @ 8055D5C
- ldr r2, _08055D68 @ =gUnknown_2031DBC
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .align 2, 0
-_08055D68: .4byte gUnknown_2031DBC
- thumb_func_end sub_8055D5C
-
- thumb_func_start sub_8055D6C
-sub_8055D6C: @ 8055D6C
- push {lr}
- adds r1, r0, 0
- movs r0, 0
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x1]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl Overworld_GetMapHeaderByGroupAndId
- ldrh r0, [r0, 0x10]
- pop {r1}
- bx r1
- thumb_func_end sub_8055D6C
-
- thumb_func_start sub_8055D8C
-sub_8055D8C: @ 8055D8C
- push {lr}
- ldr r0, _08055DA0 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x4
- bl sub_8055D6C
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_08055DA0: .4byte gSaveBlock1Ptr
- thumb_func_end sub_8055D8C
-
- thumb_func_start sub_8055DA4
-sub_8055DA4: @ 8055DA4
- push {lr}
- ldr r0, _08055DB4 @ =gUnknown_2031DBC
- bl sub_8055D6C
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_08055DB4: .4byte gUnknown_2031DBC
- thumb_func_end sub_8055DA4
-
- thumb_func_start sub_8055DB8
-sub_8055DB8: @ 8055DB8
- push {lr}
- bl ResetMapMusic
- pop {r0}
- bx r0
- thumb_func_end sub_8055DB8
-
- thumb_func_start Overworld_PlaySpecialMapMusic
-Overworld_PlaySpecialMapMusic: @ 8055DC4
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r0, _08055DD8 @ =gDisableMapMusicChangeOnMapLoad
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08055DDC
- bl StopMapMusic
- b _08055E6C
- .align 2, 0
-_08055DD8: .4byte gDisableMapMusicChangeOnMapLoad
-_08055DDC:
- cmp r0, 0x2
- beq _08055E6C
- ldr r0, _08055E14 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- ldr r0, _08055E18 @ =0x00004f01
- cmp r1, r0
- bne _08055E24
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- movs r1, 0
- ldrsh r0, [r4, r1]
- subs r0, 0x7
- cmp r0, 0xA
- bgt _08055E24
- ldr r0, _08055E1C @ =gMPlayInfo_BGM
- ldr r1, [r0]
- ldr r0, _08055E20 @ =mus_win_gym
- cmp r1, r0
- bne _08055E24
- movs r0, 0x4
- bl FadeInBGM
- b _08055E6C
- .align 2, 0
-_08055E14: .4byte gSaveBlock1Ptr
-_08055E18: .4byte 0x00004f01
-_08055E1C: .4byte gMPlayInfo_BGM
-_08055E20: .4byte mus_win_gym
-_08055E24:
- bl sub_8055D8C
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, _08055E3C @ =gSaveBlock1Ptr
- ldr r1, [r0]
- ldrh r0, [r1, 0x2C]
- cmp r0, 0
- beq _08055E40
- adds r4, r0, 0
- b _08055E5A
- .align 2, 0
-_08055E3C: .4byte gSaveBlock1Ptr
-_08055E40:
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08055E5A
- ldr r5, _08055E74 @ =0x00000131 @ MUS_NAMINORI
- adds r0, r5, 0
- bl sub_8056124
- cmp r0, 0
- beq _08055E5A
- adds r4, r5, 0
-_08055E5A:
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r0, 16
- cmp r4, r0
- beq _08055E6C
- adds r0, r4, 0
- bl PlayNewMapMusic
-_08055E6C:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08055E74: .4byte 0x00000131
- thumb_func_end Overworld_PlaySpecialMapMusic
-
- thumb_func_start Overworld_SetSavedMusic
-Overworld_SetSavedMusic: @ 8055E78
- ldr r1, _08055E80 @ =gSaveBlock1Ptr
- ldr r1, [r1]
- strh r0, [r1, 0x2C]
- bx lr
- .align 2, 0
-_08055E80: .4byte gSaveBlock1Ptr
- thumb_func_end Overworld_SetSavedMusic
-
- thumb_func_start Overworld_ClearSavedMusic
-Overworld_ClearSavedMusic: @ 8055E84
- ldr r0, _08055E90 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0
- strh r0, [r1, 0x2C]
- bx lr
- .align 2, 0
-_08055E90: .4byte gSaveBlock1Ptr
- thumb_func_end Overworld_ClearSavedMusic
-
- thumb_func_start sub_8055E94
-sub_8055E94: @ 8055E94
- push {r4-r6,lr}
- ldr r0, _08055EA4 @ =gDisableMapMusicChangeOnMapLoad
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08055EA8
- bl StopMapMusic
- b _08055F14
- .align 2, 0
-_08055EA4: .4byte gDisableMapMusicChangeOnMapLoad
-_08055EA8:
- cmp r0, 0x2
- beq _08055F14
- ldr r0, _08055F04 @ =0x00004001
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055F14
- bl sub_8055DA4
- lsls r0, 16
- lsrs r4, r0, 16
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r5, _08055F08 @ =0x00000131 @ MUS_NAMINORI
- cmp r6, r5
- beq _08055F14
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08055EE8
- adds r0, r5, 0
- bl sub_8056124
- cmp r0, 0
- beq _08055EE8
- adds r4, r5, 0
-_08055EE8:
- cmp r4, r6
- beq _08055F14
- movs r0, 0x6
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08055F0C
- adds r0, r4, 0
- movs r1, 0x4
- movs r2, 0x4
- bl FadeOutAndFadeInNewMapMusic
- b _08055F14
- .align 2, 0
-_08055F04: .4byte 0x00004001
-_08055F08: .4byte 0x00000131
-_08055F0C:
- adds r0, r4, 0
- movs r1, 0x8
- bl FadeOutAndPlayNewMapMusic
-_08055F14:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8055E94
-
- thumb_func_start Overworld_ChangeMusicToDefault
-Overworld_ChangeMusicToDefault: @ 8055F1C
- push {r4,lr}
- bl GetCurrentMapMusic
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl sub_8055D8C
- lsls r0, 16
- lsrs r0, 16
- cmp r4, r0
- beq _08055F42
- bl sub_8055D8C
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x8
- bl FadeOutAndPlayNewMapMusic
-_08055F42:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end Overworld_ChangeMusicToDefault
-
- thumb_func_start Overworld_ChangeMusicTo
-Overworld_ChangeMusicTo: @ 8055F48
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r4
- beq _08055F62
- adds r0, r4, 0
- movs r1, 0x8
- bl FadeOutAndPlayNewMapMusic
-_08055F62:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end Overworld_ChangeMusicTo
-
- thumb_func_start GetMapMusicFadeoutSpeed
-GetMapMusicFadeoutSpeed: @ 8055F68
- push {lr}
- bl warp1_get_mapheader
- ldrb r0, [r0, 0x17]
- bl IsMapTypeIndoors
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055F80
- movs r0, 0x4
- b _08055F82
-_08055F80:
- movs r0, 0x2
-_08055F82:
- pop {r1}
- bx r1
- thumb_func_end GetMapMusicFadeoutSpeed
-
- thumb_func_start TryFadeOutOldMapMusic
-TryFadeOutOldMapMusic: @ 8055F88
- push {r4,lr}
- bl sub_8055DA4
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, _08055FC0 @ =0x00004001
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055FB8
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r0, 16
- cmp r4, r0
- beq _08055FB8
- bl GetMapMusicFadeoutSpeed
- lsls r0, 24
- lsrs r0, 24
- bl FadeOutMapMusic
-_08055FB8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08055FC0: .4byte 0x00004001
- thumb_func_end TryFadeOutOldMapMusic
-
- thumb_func_start BGMusicStopped
-BGMusicStopped: @ 8055FC4
- push {lr}
- bl IsNotWaitingForBGMStop
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end BGMusicStopped
-
- thumb_func_start Overworld_FadeOutMapMusic
-Overworld_FadeOutMapMusic: @ 8055FD4
- push {lr}
- movs r0, 0x4
- bl FadeOutMapMusic
- pop {r0}
- bx r0
- thumb_func_end Overworld_FadeOutMapMusic
-
- thumb_func_start sub_8055FE0
-sub_8055FE0: @ 8055FE0
- push {r4,lr}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- ldr r0, _0805604C @ =gUnknown_2031DDC
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08056014
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsSurfable
- lsls r0, 24
- cmp r0, 0
- beq _0805606A
-_08056014:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x58
- bl __umodsi3
- adds r0, 0xD4
- lsls r0, 24
- lsrs r4, r0, 24
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1E
- bl __umodsi3
- adds r0, 0x32
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08056050 @ =gDisableMapMusicChangeOnMapLoad
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08056054
- bl StopMapMusic
- b _0805606A
- .align 2, 0
-_0805604C: .4byte gUnknown_2031DDC
-_08056050: .4byte gDisableMapMusicChangeOnMapLoad
-_08056054:
- cmp r0, 0x2
- beq _0805606A
- ldr r0, _08056074 @ =gUnknown_2031DDA
- ldrh r0, [r0]
- lsls r1, r4, 24
- asrs r1, 24
- lsls r2, 24
- asrs r2, 24
- movs r3, 0x1
- bl PlayCry2
-_0805606A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08056074: .4byte gUnknown_2031DDA
- thumb_func_end sub_8055FE0
-
- thumb_func_start sub_8056078
-sub_8056078: @ 8056078
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r5, r1, 0
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0x4
- bhi _08056106
- lsls r0, 2
- ldr r1, _08056090 @ =_08056094
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08056090: .4byte _08056094
- .align 2, 0
-_08056094:
- .4byte _080560A8
- .4byte _080560BC
- .4byte _080560D8
- .4byte _080560F2
- .4byte _08056106
-_080560A8:
- ldr r0, _080560B4 @ =gUnknown_2031DDA
- ldrh r0, [r0]
- cmp r0, 0
- bne _080560B8
- movs r0, 0x4
- b _08056104
- .align 2, 0
-_080560B4: .4byte gUnknown_2031DDA
-_080560B8:
- movs r0, 0x1
- b _08056104
-_080560BC:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x96
- lsls r1, 4
- bl __umodsi3
- movs r1, 0x96
- lsls r1, 3
- adds r0, r1
- strh r0, [r5]
- movs r0, 0x3
- b _08056104
-_080560D8:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r4, 0x96
- lsls r4, 3
- adds r1, r4, 0
- bl __umodsi3
- adds r0, r4
- strh r0, [r5]
- movs r0, 0x3
- b _08056104
-_080560F2:
- ldrh r0, [r5]
- subs r0, 0x1
- strh r0, [r5]
- lsls r0, 16
- cmp r0, 0
- bne _08056106
- bl sub_8055FE0
- movs r0, 0x2
-_08056104:
- strh r0, [r6]
-_08056106:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8056078
-
- thumb_func_start sub_805610C
-sub_805610C: @ 805610C
- push {lr}
- ldr r0, _0805611C @ =gUnknown_2031DDC
- bl GetLocalWildMon
- ldr r1, _08056120 @ =gUnknown_2031DDA
- strh r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0805611C: .4byte gUnknown_2031DDC
-_08056120: .4byte gUnknown_2031DDA
- thumb_func_end sub_805610C
-
- thumb_func_start sub_8056124
-sub_8056124: @ 8056124
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- movs r0, 0x8D
- lsls r0, 1
- cmp r1, r0
- beq _08056138
- adds r0, 0x17
- cmp r1, r0
- bne _08056150
-_08056138:
- ldr r0, _0805614C @ =gMapHeader
- ldrb r0, [r0, 0x14]
- cmp r0, 0x84
- beq _08056148
- cmp r0, 0x7B
- beq _08056148
- cmp r0, 0x61
- bne _08056150
-_08056148:
- movs r0, 0
- b _08056152
- .align 2, 0
-_0805614C: .4byte gMapHeader
-_08056150:
- movs r0, 0x1
-_08056152:
- pop {r1}
- bx r1
- thumb_func_end sub_8056124
-
- thumb_func_start get_map_light_level_by_bank_and_number
-get_map_light_level_by_bank_and_number: @ 8056158
- push {lr}
- lsls r0, 24
- asrs r0, 8
- lsrs r0, 16
- lsls r1, 24
- asrs r1, 8
- lsrs r1, 16
- bl Overworld_GetMapHeaderByGroupAndId
- ldrb r0, [r0, 0x17]
- pop {r1}
- bx r1
- thumb_func_end get_map_light_level_by_bank_and_number
-
- thumb_func_start get_map_light_level_from_warp
-get_map_light_level_from_warp: @ 8056170
- push {lr}
- movs r2, 0
- ldrsb r2, [r0, r2]
- movs r1, 0x1
- ldrsb r1, [r0, r1]
- adds r0, r2, 0
- bl get_map_light_level_by_bank_and_number
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end get_map_light_level_from_warp
-
- thumb_func_start GetCurrentMapType
-GetCurrentMapType: @ 8056188
- push {lr}
- ldr r0, _0805619C @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x4
- bl get_map_light_level_from_warp
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0805619C: .4byte gSaveBlock1Ptr
- thumb_func_end GetCurrentMapType
-
- thumb_func_start GetLastUsedWarpMapType
-GetLastUsedWarpMapType: @ 80561A0
- push {lr}
- ldr r0, _080561B0 @ =gUnknown_2031DB4
- bl get_map_light_level_from_warp
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_080561B0: .4byte gUnknown_2031DB4
- thumb_func_end GetLastUsedWarpMapType
-
- thumb_func_start GetLastUsedWarpMapSectionId
-GetLastUsedWarpMapSectionId: @ 80561B4
- push {lr}
- ldr r1, _080561D4 @ =gUnknown_2031DB4
- movs r0, 0
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x1]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl Overworld_GetMapHeaderByGroupAndId
- ldrb r0, [r0, 0x14]
- pop {r1}
- bx r1
- .align 2, 0
-_080561D4: .4byte gUnknown_2031DB4
- thumb_func_end GetLastUsedWarpMapSectionId
-
- thumb_func_start IsMapTypeOutdoors
-IsMapTypeOutdoors: @ 80561D8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _080561F2
- cmp r0, 0x1
- beq _080561F2
- cmp r0, 0x5
- beq _080561F2
- cmp r0, 0x2
- beq _080561F2
- cmp r0, 0x6
- bne _080561F6
-_080561F2:
- movs r0, 0x1
- b _080561F8
-_080561F6:
- movs r0, 0
-_080561F8:
- pop {r1}
- bx r1
- thumb_func_end IsMapTypeOutdoors
-
- thumb_func_start Overworld_MapTypeAllowsTeleportAndFly
-Overworld_MapTypeAllowsTeleportAndFly: @ 80561FC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _08056212
- cmp r0, 0x1
- beq _08056212
- cmp r0, 0x6
- beq _08056212
- cmp r0, 0x2
- bne _08056216
-_08056212:
- movs r0, 0x1
- b _08056218
-_08056216:
- movs r0, 0
-_08056218:
- pop {r1}
- bx r1
- thumb_func_end Overworld_MapTypeAllowsTeleportAndFly
-
- thumb_func_start IsMapTypeIndoors
-IsMapTypeIndoors: @ 805621C
- push {lr}
- lsls r0, 24
- movs r1, 0xF8
- lsls r1, 24
- adds r0, r1
- lsrs r0, 24
- cmp r0, 0x1
- bls _08056230
- movs r0, 0
- b _08056232
-_08056230:
- movs r0, 0x1
-_08056232:
- pop {r1}
- bx r1
- thumb_func_end IsMapTypeIndoors
-
- thumb_func_start GetSavedWarpRegionMapSectionId
-GetSavedWarpRegionMapSectionId: @ 8056238
- push {lr}
- ldr r0, _0805625C @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x14
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x15]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl Overworld_GetMapHeaderByGroupAndId
- ldrb r0, [r0, 0x14]
- pop {r1}
- bx r1
- .align 2, 0
-_0805625C: .4byte gSaveBlock1Ptr
- thumb_func_end GetSavedWarpRegionMapSectionId
-
- thumb_func_start GetCurrentRegionMapSectionId
-GetCurrentRegionMapSectionId: @ 8056260
- push {lr}
- ldr r0, _08056284 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl Overworld_GetMapHeaderByGroupAndId
- ldrb r0, [r0, 0x14]
- pop {r1}
- bx r1
- .align 2, 0
-_08056284: .4byte gSaveBlock1Ptr
- thumb_func_end GetCurrentRegionMapSectionId
-
- thumb_func_start GetCurrentMapBattleScene
-GetCurrentMapBattleScene: @ 8056288
- push {lr}
- ldr r0, _080562AC @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl Overworld_GetMapHeaderByGroupAndId
- ldrb r0, [r0, 0x1B]
- pop {r1}
- bx r1
- .align 2, 0
-_080562AC: .4byte gSaveBlock1Ptr
- thumb_func_end GetCurrentMapBattleScene
-
- thumb_func_start InitOverworldBgs
-InitOverworldBgs: @ 80562B0
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- bl MoveSaveBlocks_ResetHeap_
- bl sub_8056E80
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _08056344 @ =gUnknown_826D320
- movs r0, 0
- movs r2, 0x4
- bl InitBgsFromTemplates
- movs r0, 0x1
- movs r1, 0x5
- movs r2, 0x1
- bl SetBgAttribute
- movs r0, 0x2
- movs r1, 0x5
- movs r2, 0x1
- bl SetBgAttribute
- movs r0, 0x3
- movs r1, 0x5
- movs r2, 0x1
- bl SetBgAttribute
- ldr r0, _08056348 @ =gBGTilemapBuffers2
- mov r8, r0
- movs r4, 0x80
- lsls r4, 4
- adds r0, r4, 0
- bl AllocZeroed
- mov r1, r8
- str r0, [r1]
- ldr r6, _0805634C @ =gBGTilemapBuffers1
- adds r0, r4, 0
- bl AllocZeroed
- str r0, [r6]
- ldr r5, _08056350 @ =gBGTilemapBuffers3
- adds r0, r4, 0
- bl AllocZeroed
- str r0, [r5]
- mov r0, r8
- ldr r1, [r0]
- movs r0, 0x1
- bl SetBgTilemapBuffer
- ldr r1, [r6]
- movs r0, 0x2
- bl SetBgTilemapBuffer
- ldr r1, [r5]
- movs r0, 0x3
- bl SetBgTilemapBuffer
- bl InitStandardTextBoxWindows
- bl ResetBg0
- bl sub_8069348
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08056344: .4byte gUnknown_826D320
-_08056348: .4byte gBGTilemapBuffers2
-_0805634C: .4byte gBGTilemapBuffers1
-_08056350: .4byte gBGTilemapBuffers3
- thumb_func_end InitOverworldBgs
-
- thumb_func_start sub_8056354
-sub_8056354: @ 8056354
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _080563E0 @ =gUnknown_826D320
- movs r0, 0
- movs r2, 0x4
- bl InitBgsFromTemplates
- movs r0, 0x1
- movs r1, 0x5
- movs r2, 0x1
- bl SetBgAttribute
- movs r0, 0x2
- movs r1, 0x5
- movs r2, 0x1
- bl SetBgAttribute
- movs r0, 0x3
- movs r1, 0x5
- movs r2, 0x1
- bl SetBgAttribute
- ldr r0, _080563E4 @ =gBGTilemapBuffers2
- mov r8, r0
- movs r4, 0x80
- lsls r4, 4
- adds r0, r4, 0
- bl AllocZeroed
- mov r1, r8
- str r0, [r1]
- ldr r6, _080563E8 @ =gBGTilemapBuffers1
- adds r0, r4, 0
- bl AllocZeroed
- str r0, [r6]
- ldr r5, _080563EC @ =gBGTilemapBuffers3
- adds r0, r4, 0
- bl AllocZeroed
- str r0, [r5]
- mov r0, r8
- ldr r1, [r0]
- movs r0, 0x1
- bl SetBgTilemapBuffer
- ldr r1, [r6]
- movs r0, 0x2
- bl SetBgTilemapBuffer
- ldr r1, [r5]
- movs r0, 0x3
- bl SetBgTilemapBuffer
- bl InitStandardTextBoxWindows
- bl ResetBg0
- bl sub_8069348
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080563E0: .4byte gUnknown_826D320
-_080563E4: .4byte gBGTilemapBuffers2
-_080563E8: .4byte gBGTilemapBuffers1
-_080563EC: .4byte gBGTilemapBuffers3
- thumb_func_end sub_8056354
-
- thumb_func_start CleanupOverworldWindowsAndTilemaps
-CleanupOverworldWindowsAndTilemaps: @ 80563F0
- push {lr}
- bl FreeAllOverworldWindowBuffers
- ldr r0, _08056414 @ =gBGTilemapBuffers3
- ldr r0, [r0]
- bl Free
- ldr r0, _08056418 @ =gBGTilemapBuffers1
- ldr r0, [r0]
- bl Free
- ldr r0, _0805641C @ =gBGTilemapBuffers2
- ldr r0, [r0]
- bl Free
- pop {r0}
- bx r0
- .align 2, 0
-_08056414: .4byte gBGTilemapBuffers3
-_08056418: .4byte gBGTilemapBuffers1
-_0805641C: .4byte gBGTilemapBuffers2
- thumb_func_end CleanupOverworldWindowsAndTilemaps
-
- thumb_func_start sub_8056420
-sub_8056420: @ 8056420
- push {lr}
- bl ResetSafariZoneFlag
- pop {r0}
- bx r0
- thumb_func_end sub_8056420
-
- thumb_func_start IsUpdateLinkStateCBActive
-IsUpdateLinkStateCBActive: @ 805642C
- push {lr}
- ldr r0, _0805643C @ =gMain
- ldr r1, [r0]
- ldr r0, _08056440 @ =c1_link_related
- cmp r1, r0
- beq _08056444
- movs r0, 0
- b _08056446
- .align 2, 0
-_0805643C: .4byte gMain
-_08056440: .4byte c1_link_related
-_08056444:
- movs r0, 0x1
-_08056446:
- pop {r1}
- bx r1
- thumb_func_end IsUpdateLinkStateCBActive
-
- thumb_func_start sub_805644C
-sub_805644C: @ 805644C
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r0, 16
- adds r5, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r4, r1, 0
- bl sub_8112B3C
- bl sub_805BEB8
- mov r6, sp
- mov r0, sp
- bl FieldClearPlayerInput
- mov r0, sp
- adds r1, r5, 0
- adds r2, r4, 0
- bl FieldGetPlayerInput
- mov r0, sp
- bl FieldInput_HandleCancelSignpost
- bl ScriptContext2_IsEnabled
- lsls r0, 24
- cmp r0, 0
- bne _080564BA
- mov r0, sp
- bl ProcessPlayerFieldInput
- cmp r0, 0x1
- bne _080564B0
- ldr r0, _080564A8 @ =gUnknown_3005E88
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _0805649E
- ldr r0, _080564AC @ =gInputToStoreInQuestLogMaybe
- bl sub_81127F8
-_0805649E:
- bl ScriptContext2_Enable
- bl DismissMapNamePopup
- b _080564BA
- .align 2, 0
-_080564A8: .4byte gUnknown_3005E88
-_080564AC: .4byte gInputToStoreInQuestLogMaybe
-_080564B0:
- ldrb r0, [r6, 0x2]
- adds r1, r5, 0
- adds r2, r4, 0
- bl player_step
-_080564BA:
- bl RunQuestLogCB
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_805644C
-
- thumb_func_start sub_80564C8
-sub_80564C8: @ 80564C8
- push {lr}
- sub sp, 0x4
- bl sub_8112B3C
- bl sub_805BEB8
- bl sub_8111C68
- mov r0, sp
- bl FieldClearPlayerInput
- ldr r0, _08056508 @ =gUnknown_3005E90
- ldr r0, [r0]
- str r0, [sp]
- mov r0, sp
- bl FieldInput_HandleCancelSignpost
- bl ScriptContext2_IsEnabled
- lsls r0, 24
- cmp r0, 0
- bne _08056512
- mov r0, sp
- bl ProcessPlayerFieldInput
- cmp r0, 0x1
- bne _0805650C
- bl ScriptContext2_Enable
- bl DismissMapNamePopup
- b _08056522
- .align 2, 0
-_08056508: .4byte gUnknown_3005E90
-_0805650C:
- bl RunQuestLogCB
- b _08056522
-_08056512:
- bl sub_8111CD0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08056522
- bl RunQuestLogCB
-_08056522:
- ldr r0, _08056530 @ =gUnknown_3005E90
- bl FieldClearPlayerInput
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_08056530: .4byte gUnknown_3005E90
- thumb_func_end sub_80564C8
-
- thumb_func_start CB1_Overworld
-CB1_Overworld: @ 8056534
- push {r4,lr}
- ldr r4, _0805655C @ =gMain
- ldr r1, [r4, 0x4]
- ldr r0, _08056560 @ =sub_80565B4
- cmp r1, r0
- bne _08056570
- bl sub_8112CAC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08056554
- ldr r0, _08056564 @ =gQuestLogState
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _08056568
-_08056554:
- bl sub_80564C8
- b _08056570
- .align 2, 0
-_0805655C: .4byte gMain
-_08056560: .4byte sub_80565B4
-_08056564: .4byte gQuestLogState
-_08056568:
- ldrh r0, [r4, 0x2E]
- ldrh r1, [r4, 0x2C]
- bl sub_805644C
-_08056570:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end CB1_Overworld
-
- thumb_func_start sub_8056578
-sub_8056578: @ 8056578
- push {lr}
- bl ScriptContext2_RunScript
- bl RunTasks
- bl AnimateSprites
- bl CameraUpdate
- bl sub_8115798
- bl UpdateCameraPanning
- bl BuildOamBuffer
- bl UpdatePaletteFade
- bl UpdateTilesetAnimations
- bl DoScheduledBgTilemapCopiesToVram
- pop {r0}
- bx r0
- thumb_func_end sub_8056578
-
- thumb_func_start CB2_OverworldBasic
-CB2_OverworldBasic: @ 80565A8
- push {lr}
- bl sub_8056578
- pop {r0}
- bx r0
- thumb_func_end CB2_OverworldBasic
-
- thumb_func_start sub_80565B4
-sub_80565B4: @ 80565B4
- push {r4,lr}
- ldr r0, _080565DC @ =gPaletteFade
- ldrb r0, [r0, 0x7]
- lsrs r0, 7
- adds r4, r0, 0
- cmp r4, 0
- beq _080565C8
- movs r0, 0
- bl SetVBlankCallback
-_080565C8:
- bl sub_8056578
- cmp r4, 0
- beq _080565D4
- bl SetFieldVBlankCallback
-_080565D4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080565DC: .4byte gPaletteFade
- thumb_func_end sub_80565B4
-
- thumb_func_start SetMainCallback1
-SetMainCallback1: @ 80565E0
- ldr r1, _080565E8 @ =gMain
- str r0, [r1]
- bx lr
- .align 2, 0
-_080565E8: .4byte gMain
- thumb_func_end SetMainCallback1
-
- thumb_func_start map_post_load_hook_exec
-map_post_load_hook_exec: @ 80565EC
- push {r4,lr}
- ldr r4, _08056604 @ =gFieldCallback2
- ldr r0, [r4]
- cmp r0, 0
- beq _08056618
- bl _call_via_r0
- lsls r0, 24
- cmp r0, 0
- bne _08056608
- movs r0, 0
- b _08056638
- .align 2, 0
-_08056604: .4byte gFieldCallback2
-_08056608:
- movs r1, 0
- str r1, [r4]
- ldr r0, _08056614 @ =gFieldCallback
- str r1, [r0]
- b _08056636
- .align 2, 0
-_08056614: .4byte gFieldCallback
-_08056618:
- ldr r0, _08056628 @ =gFieldCallback
- ldr r0, [r0]
- cmp r0, 0
- beq _0805662C
- bl _call_via_r0
- b _08056630
- .align 2, 0
-_08056628: .4byte gFieldCallback
-_0805662C:
- bl FieldCB_UnionRoomWarp
-_08056630:
- ldr r1, _08056640 @ =gFieldCallback
- movs r0, 0
- str r0, [r1]
-_08056636:
- movs r0, 0x1
-_08056638:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08056640: .4byte gFieldCallback
- thumb_func_end map_post_load_hook_exec
-
- thumb_func_start CB2_NewGame
-CB2_NewGame: @ 8056644
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- bl StopMapMusic
- bl sub_8056420
- bl NewGameInitData
- bl ResetInitialPlayerAvatarState
- bl PlayTimeCounter_Start
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- ldr r1, _0805668C @ =gFieldCallback
- ldr r0, _08056690 @ =sub_807DF7C
- str r0, [r1]
- ldr r1, _08056694 @ =gFieldCallback2
- movs r0, 0
- str r0, [r1]
- ldr r0, _08056698 @ =gMain + 0x438
- bl do_load_map_stuff_loop
- bl SetFieldVBlankCallback
- ldr r0, _0805669C @ =CB1_Overworld
- bl SetMainCallback1
- ldr r0, _080566A0 @ =sub_80565B4
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_0805668C: .4byte gFieldCallback
-_08056690: .4byte sub_807DF7C
-_08056694: .4byte gFieldCallback2
-_08056698: .4byte gMain + 0x438
-_0805669C: .4byte CB1_Overworld
-_080566A0: .4byte sub_80565B4
- thumb_func_end CB2_NewGame
-
- thumb_func_start CB2_WhiteOut
-CB2_WhiteOut: @ 80566A4
- push {lr}
- sub sp, 0x4
- ldr r1, _08056708 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x77
- bls _08056702
- bl FieldClearVBlankHBlankCallbacks
- bl StopMapMusic
- bl sub_8056420
- bl sub_8054BC8
- movs r0, 0x2
- bl sub_80559F8
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- ldr r1, _0805670C @ =gFieldCallback
- ldr r0, _08056710 @ =sub_807F5F0
- str r0, [r1]
- mov r1, sp
- movs r0, 0
- strb r0, [r1]
- mov r0, sp
- bl do_load_map_stuff_loop
- bl sub_8112364
- bl SetFieldVBlankCallback
- ldr r0, _08056714 @ =CB1_Overworld
- bl SetMainCallback1
- ldr r0, _08056718 @ =sub_80565B4
- bl SetMainCallback2
-_08056702:
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_08056708: .4byte gMain
-_0805670C: .4byte gFieldCallback
-_08056710: .4byte sub_807F5F0
-_08056714: .4byte CB1_Overworld
-_08056718: .4byte sub_80565B4
- thumb_func_end CB2_WhiteOut
-
- thumb_func_start CB2_LoadMap
-CB2_LoadMap: @ 805671C
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- movs r0, 0
- bl SetMainCallback1
- ldr r0, _08056740 @ =CB2_DoChangeMap
- bl SetMainCallback2
- ldr r1, _08056744 @ =gMain
- ldr r0, _08056748 @ =sub_805674C
- str r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_08056740: .4byte CB2_DoChangeMap
-_08056744: .4byte gMain
-_08056748: .4byte sub_805674C
- thumb_func_end CB2_LoadMap
-
- thumb_func_start sub_805674C
-sub_805674C: @ 805674C
- push {lr}
- ldr r0, _08056768 @ =gMain + 0x438
- bl do_load_map_stuff_loop
- bl sub_8113748
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0805676C
- bl sub_81119C8
- b _0805677C
- .align 2, 0
-_08056768: .4byte gMain + 0x438
-_0805676C:
- bl SetFieldVBlankCallback
- ldr r0, _08056780 @ =CB1_Overworld
- bl SetMainCallback1
- ldr r0, _08056784 @ =sub_80565B4
- bl SetMainCallback2
-_0805677C:
- pop {r0}
- bx r0
- .align 2, 0
-_08056780: .4byte CB1_Overworld
-_08056784: .4byte sub_80565B4
- thumb_func_end sub_805674C
-
- thumb_func_start CB2_ReturnToFieldCableClub
-CB2_ReturnToFieldCableClub: @ 8056788
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- ldr r0, _080567A0 @ =gFieldCallback
- ldr r1, _080567A4 @ =FieldCB_ReturnToFieldWirelessLink
- str r1, [r0]
- ldr r0, _080567A8 @ =c2_80567AC
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_080567A0: .4byte gFieldCallback
-_080567A4: .4byte FieldCB_ReturnToFieldWirelessLink
-_080567A8: .4byte c2_80567AC
- thumb_func_end CB2_ReturnToFieldCableClub
-
- thumb_func_start c2_80567AC
-c2_80567AC: @ 80567AC
- push {lr}
- ldr r0, _080567D0 @ =gMain + 0x438
- bl map_loading_iteration_3
- cmp r0, 0
- beq _080567CC
- bl SetFieldVBlankCallback
- ldr r0, _080567D4 @ =c1_link_related
- bl SetMainCallback1
- bl sub_80578D8
- ldr r0, _080567D8 @ =sub_80565B4
- bl SetMainCallback2
-_080567CC:
- pop {r0}
- bx r0
- .align 2, 0
-_080567D0: .4byte gMain + 0x438
-_080567D4: .4byte c1_link_related
-_080567D8: .4byte sub_80565B4
- thumb_func_end c2_80567AC
-
- thumb_func_start CB2_ReturnToField
-CB2_ReturnToField: @ 80567DC
- push {lr}
- bl IsUpdateLinkStateCBActive
- cmp r0, 0x1
- bne _080567F4
- ldr r0, _080567F0 @ =c2_exit_to_overworld_2_link
- bl SetMainCallback2
- b _080567FE
- .align 2, 0
-_080567F0: .4byte c2_exit_to_overworld_2_link
-_080567F4:
- bl FieldClearVBlankHBlankCallbacks
- ldr r0, _08056804 @ =c2_exit_to_overworld_2_local
- bl SetMainCallback2
-_080567FE:
- pop {r0}
- bx r0
- .align 2, 0
-_08056804: .4byte c2_exit_to_overworld_2_local
- thumb_func_end CB2_ReturnToField
-
- thumb_func_start c2_exit_to_overworld_2_local
-c2_exit_to_overworld_2_local: @ 8056808
- push {lr}
- ldr r0, _08056824 @ =gMain + 0x438
- bl sub_8056CD8
- cmp r0, 0
- beq _0805681E
- bl SetFieldVBlankCallback
- ldr r0, _08056828 @ =sub_80565B4
- bl SetMainCallback2
-_0805681E:
- pop {r0}
- bx r0
- .align 2, 0
-_08056824: .4byte gMain + 0x438
-_08056828: .4byte sub_80565B4
- thumb_func_end c2_exit_to_overworld_2_local
-
- thumb_func_start c2_exit_to_overworld_2_link
-c2_exit_to_overworld_2_link: @ 805682C
- push {lr}
- bl sub_8058244
- cmp r0, 0
- bne _08056846
- ldr r0, _0805684C @ =gMain + 0x438
- bl map_loading_iteration_2_link
- cmp r0, 0
- beq _08056846
- ldr r0, _08056850 @ =sub_80565B4
- bl SetMainCallback2
-_08056846:
- pop {r0}
- bx r0
- .align 2, 0
-_0805684C: .4byte gMain + 0x438
-_08056850: .4byte sub_80565B4
- thumb_func_end c2_exit_to_overworld_2_link
-
- thumb_func_start c2_8056854
-c2_8056854: @ 8056854
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- bl StopMapMusic
- ldr r0, _08056878 @ =c1_link_related
- bl SetMainCallback1
- bl sub_80578D8
- ldr r0, _0805687C @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _08056888
- ldr r1, _08056880 @ =gFieldCallback
- ldr r0, _08056884 @ =FieldCB_ReturnToFieldWirelessLink
- b _0805688C
- .align 2, 0
-_08056878: .4byte c1_link_related
-_0805687C: .4byte gWirelessCommType
-_08056880: .4byte gFieldCallback
-_08056884: .4byte FieldCB_ReturnToFieldWirelessLink
-_08056888:
- ldr r1, _080568A0 @ =gFieldCallback
- ldr r0, _080568A4 @ =FieldCB_ReturnToFieldWiredLink
-_0805688C:
- str r0, [r1]
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- bl CB2_ReturnToField
- pop {r0}
- bx r0
- .align 2, 0
-_080568A0: .4byte gFieldCallback
-_080568A4: .4byte FieldCB_ReturnToFieldWiredLink
- thumb_func_end c2_8056854
-
- thumb_func_start CB2_ReturnToFieldWithOpenMenu
-CB2_ReturnToFieldWithOpenMenu: @ 80568A8
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- ldr r1, _080568BC @ =gFieldCallback2
- ldr r0, _080568C0 @ =FieldCB2_ReturnToStartMenuInit
- str r0, [r1]
- bl CB2_ReturnToField
- pop {r0}
- bx r0
- .align 2, 0
-_080568BC: .4byte gFieldCallback2
-_080568C0: .4byte FieldCB2_ReturnToStartMenuInit
- thumb_func_end CB2_ReturnToFieldWithOpenMenu
-
- thumb_func_start sub_80568C4
-sub_80568C4: @ 80568C4
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- ldr r1, _080568D8 @ =gFieldCallback
- ldr r0, _080568DC @ =sub_807DD44
- str r0, [r1]
- bl CB2_ReturnToField
- pop {r0}
- bx r0
- .align 2, 0
-_080568D8: .4byte gFieldCallback
-_080568DC: .4byte sub_807DD44
- thumb_func_end sub_80568C4
-
- thumb_func_start CB2_ReturnToFieldContinueScriptPlayMapMusic
-CB2_ReturnToFieldContinueScriptPlayMapMusic: @ 80568E0
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- ldr r1, _080568F4 @ =gFieldCallback
- ldr r0, _080568F8 @ =FieldCallback_ReturnToEventScript2
- str r0, [r1]
- bl CB2_ReturnToField
- pop {r0}
- bx r0
- .align 2, 0
-_080568F4: .4byte gFieldCallback
-_080568F8: .4byte FieldCallback_ReturnToEventScript2
- thumb_func_end CB2_ReturnToFieldContinueScriptPlayMapMusic
-
- thumb_func_start CB2_Overworld
-CB2_Overworld: @ 80568FC
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- ldr r1, _08056910 @ =gFieldCallback
- ldr r0, _08056914 @ =sub_807DF7C
- str r0, [r1]
- bl CB2_ReturnToField
- pop {r0}
- bx r0
- .align 2, 0
-_08056910: .4byte gFieldCallback
-_08056914: .4byte sub_807DF7C
- thumb_func_end CB2_Overworld
-
- thumb_func_start sub_8056918
-sub_8056918: @ 8056918
- push {lr}
- ldr r0, _08056934 @ =gMapHeader
- ldrb r1, [r0, 0x19]
- movs r0, 0xFC
- ands r0, r1
- cmp r0, 0x4
- bne _0805692C
- movs r0, 0
- bl CreateMapNamePopupIfNotAlreadyRunning
-_0805692C:
- bl sub_807DF7C
- pop {r0}
- bx r0
- .align 2, 0
-_08056934: .4byte gMapHeader
- thumb_func_end sub_8056918
-
- thumb_func_start CB2_ContinueSavedGame
-CB2_ContinueSavedGame: @ 8056938
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- bl StopMapMusic
- bl sub_8056420
- bl set_current_map_header_from_sav1
- bl sub_80550A8
- bl UnfreezeObjectEvents
- bl sub_8054E40
- bl InitMapFromSavedGame
- bl PlayTimeCounter_Start
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- ldr r1, _08056990 @ =gFieldCallback2
- movs r0, 0
- str r0, [r1]
- ldr r1, _08056994 @ =gUnknown_2031DE0
- movs r0, 0x1
- strb r0, [r1]
- bl sav2_x1_query_bit1
- cmp r0, 0x1
- bne _0805699C
- bl sav2_x9_clear_bit1
- bl warp1_set_to_sav1w
- bl WarpIntoMap
- ldr r0, _08056998 @ =CB2_LoadMap
- bl SetMainCallback2
- b _080569AC
- .align 2, 0
-_08056990: .4byte gFieldCallback2
-_08056994: .4byte gUnknown_2031DE0
-_08056998: .4byte CB2_LoadMap
-_0805699C:
- ldr r0, _080569B0 @ =gFieldCallback
- ldr r1, _080569B4 @ =sub_8056918
- str r1, [r0]
- ldr r0, _080569B8 @ =CB1_Overworld
- bl SetMainCallback1
- bl CB2_ReturnToField
-_080569AC:
- pop {r0}
- bx r0
- .align 2, 0
-_080569B0: .4byte gFieldCallback
-_080569B4: .4byte sub_8056918
-_080569B8: .4byte CB1_Overworld
- thumb_func_end CB2_ContinueSavedGame
-
- thumb_func_start FieldClearVBlankHBlankCallbacks
-FieldClearVBlankHBlankCallbacks: @ 80569BC
- push {lr}
- bl sub_80CC87C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080569CE
- bl CloseLink
-_080569CE:
- ldr r0, _080569E4 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _080569E8
- movs r0, 0xC5
- bl EnableInterrupts
- movs r0, 0x2
- bl DisableInterrupts
- b _080569F4
- .align 2, 0
-_080569E4: .4byte gWirelessCommType
-_080569E8:
- movs r0, 0x2
- bl DisableInterrupts
- movs r0, 0x1
- bl EnableInterrupts
-_080569F4:
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- bl SetHBlankCallback
- pop {r0}
- bx r0
- thumb_func_end FieldClearVBlankHBlankCallbacks
-
- thumb_func_start SetFieldVBlankCallback
-SetFieldVBlankCallback: @ 8056A04
- push {lr}
- ldr r0, _08056A10 @ =VBlankCB_Field
- bl SetVBlankCallback
- pop {r0}
- bx r0
- .align 2, 0
-_08056A10: .4byte VBlankCB_Field
- thumb_func_end SetFieldVBlankCallback
-
- thumb_func_start VBlankCB_Field
-VBlankCB_Field: @ 8056A14
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl ScanlineEffect_InitHBlankDmaTransfer
- bl FieldUpdateBgTilemapScroll
- bl TransferPlttBuffer
- bl TransferTilesetAnimsBuffer
- pop {r0}
- bx r0
- thumb_func_end VBlankCB_Field
-
- thumb_func_start InitCurrentFlashLevelScanlineEffect
-InitCurrentFlashLevelScanlineEffect: @ 8056A34
- push {lr}
- bl Overworld_GetFlashLevel
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08056A52
- bl WriteFlashScanlineEffectBuffer
- ldr r2, _08056A58 @ =gFlashEffectParams
- ldr r0, [r2]
- ldr r1, [r2, 0x4]
- ldr r2, [r2, 0x8]
- bl ScanlineEffect_SetParams
-_08056A52:
- pop {r0}
- bx r0
- .align 2, 0
-_08056A58: .4byte gFlashEffectParams
- thumb_func_end InitCurrentFlashLevelScanlineEffect
-
- thumb_func_start map_loading_iteration_3
-map_loading_iteration_3: @ 8056A5C
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0xD
- bls _08056A68
- b _08056B6E
-_08056A68:
- lsls r0, 2
- ldr r1, _08056A74 @ =_08056A78
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08056A74: .4byte _08056A78
- .align 2, 0
-_08056A78:
- .4byte _08056AB0
- .4byte _08056ABE
- .4byte _08056AC6
- .4byte _08056ACE
- .4byte _08056AE4
- .4byte _08056AEE
- .4byte _08056AF4
- .4byte _08056B04
- .4byte _08056B14
- .4byte _08056B30
- .4byte _08056B36
- .4byte _08056B3C
- .4byte _08056B58
- .4byte _08056B6A
-_08056AB0:
- bl InitOverworldBgs
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- b _08056B62
-_08056ABE:
- movs r0, 0x1
- bl sub_8055920
- b _08056B62
-_08056AC6:
- movs r0, 0x1
- bl sub_8057024
- b _08056B62
-_08056ACE:
- bl sub_8057178
- bl sub_8057074
- bl sub_80571A8
- bl sub_8057140
- bl SetHelpContextForMap
- b _08056B62
-_08056AE4:
- bl InitCurrentFlashLevelScanlineEffect
- bl sub_8056F1C
- b _08056B62
-_08056AEE:
- bl move_tilemap_camera_to_upper_left_corner
- b _08056B62
-_08056AF4:
- ldr r0, _08056B00 @ =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset1_to_vram
- b _08056B62
- .align 2, 0
-_08056B00: .4byte gMapHeader
-_08056B04:
- ldr r0, _08056B10 @ =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset2_to_vram
- b _08056B62
- .align 2, 0
-_08056B10: .4byte gMapHeader
-_08056B14:
- bl FreeTempTileDataBuffersIfPossible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08056B6E
- ldr r0, _08056B2C @ =gMapHeader
- ldr r0, [r0]
- bl apply_map_tileset1_tileset2_palette
- b _08056B62
- .align 2, 0
-_08056B2C: .4byte gMapHeader
-_08056B30:
- bl DrawWholeMapView
- b _08056B62
-_08056B36:
- bl InitTilesetAnimations
- b _08056B62
-_08056B3C:
- ldr r0, _08056B54 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _08056B62
- bl LoadWirelessStatusIndicatorSpriteGfx
- movs r0, 0
- movs r1, 0
- bl CreateWirelessStatusIndicatorSprite
- b _08056B62
- .align 2, 0
-_08056B54: .4byte gWirelessCommType
-_08056B58:
- bl map_post_load_hook_exec
- lsls r0, 24
- cmp r0, 0
- beq _08056B6E
-_08056B62:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _08056B6E
-_08056B6A:
- movs r0, 0x1
- b _08056B70
-_08056B6E:
- movs r0, 0
-_08056B70:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end map_loading_iteration_3
-
- thumb_func_start sub_8056B78
-sub_8056B78: @ 8056B78
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4]
- cmp r0, 0xE
- bls _08056B86
- b _08056CD0
-_08056B86:
- lsls r0, 2
- ldr r1, _08056B90 @ =_08056B94
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08056B90: .4byte _08056B94
- .align 2, 0
-_08056B94:
- .4byte _08056BD0
- .4byte _08056BE0
- .4byte _08056BE6
- .4byte _08056BEE
- .4byte _08056BFE
- .4byte _08056C20
- .4byte _08056C2A
- .4byte _08056C30
- .4byte _08056C40
- .4byte _08056C50
- .4byte _08056C6C
- .4byte _08056C72
- .4byte _08056C78
- .4byte _08056CC0
- .4byte _08056BFA
-_08056BD0:
- bl InitOverworldBgs
- bl FieldClearVBlankHBlankCallbacks
- adds r0, r5, 0
- bl sub_8055920
- b _08056CCA
-_08056BE0:
- bl sub_8111F14
- b _08056CCA
-_08056BE6:
- adds r0, r5, 0
- bl sub_8057024
- b _08056CCA
-_08056BEE:
- bl sub_8113748
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08056CCA
-_08056BFA:
- movs r0, 0x1
- b _08056CD2
-_08056BFE:
- bl mli4_mapscripts_and_other
- bl sub_8057114
- ldr r0, _08056C1C @ =gQuestLogState
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _08056C16
- bl sub_80CC534
- bl sub_80CC59C
-_08056C16:
- bl SetHelpContextForMap
- b _08056CCA
- .align 2, 0
-_08056C1C: .4byte gQuestLogState
-_08056C20:
- bl InitCurrentFlashLevelScanlineEffect
- bl sub_8056F1C
- b _08056CCA
-_08056C2A:
- bl move_tilemap_camera_to_upper_left_corner
- b _08056CCA
-_08056C30:
- ldr r0, _08056C3C @ =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset1_to_vram
- b _08056CCA
- .align 2, 0
-_08056C3C: .4byte gMapHeader
-_08056C40:
- ldr r0, _08056C4C @ =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset2_to_vram
- b _08056CCA
- .align 2, 0
-_08056C4C: .4byte gMapHeader
-_08056C50:
- bl FreeTempTileDataBuffersIfPossible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08056CD0
- ldr r0, _08056C68 @ =gMapHeader
- ldr r0, [r0]
- bl apply_map_tileset1_tileset2_palette
- b _08056CCA
- .align 2, 0
-_08056C68: .4byte gMapHeader
-_08056C6C:
- bl DrawWholeMapView
- b _08056CCA
-_08056C72:
- bl InitTilesetAnimations
- b _08056CCA
-_08056C78:
- bl GetLastUsedWarpMapSectionId
- ldr r5, _08056CA4 @ =gMapHeader
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r5, 0x14]
- cmp r0, r1
- beq _08056CA8
- ldrb r0, [r5, 0x14]
- movs r1, 0x1
- bl MapHasPreviewScreen_HandleQLState2
- cmp r0, 0x1
- bne _08056CA8
- ldrb r0, [r5, 0x14]
- bl MapPreview_LoadGfx
- ldrb r0, [r5, 0x14]
- bl MapPreview_StartForestTransition
- b _08056CCA
- .align 2, 0
-_08056CA4: .4byte gMapHeader
-_08056CA8:
- ldr r0, _08056CBC @ =gMapHeader
- ldrb r1, [r0, 0x19]
- movs r0, 0xFC
- ands r0, r1
- cmp r0, 0x4
- bne _08056CCA
- movs r0, 0
- bl CreateMapNamePopupIfNotAlreadyRunning
- b _08056CCA
- .align 2, 0
-_08056CBC: .4byte gMapHeader
-_08056CC0:
- bl map_post_load_hook_exec
- lsls r0, 24
- cmp r0, 0
- beq _08056CD0
-_08056CCA:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
-_08056CD0:
- movs r0, 0
-_08056CD2:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8056B78
-
- thumb_func_start sub_8056CD8
-sub_8056CD8: @ 8056CD8
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0x4
- bhi _08056D3C
- lsls r0, 2
- ldr r1, _08056CEC @ =_08056CF0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08056CEC: .4byte _08056CF0
- .align 2, 0
-_08056CF0:
- .4byte _08056D04
- .4byte _08056D30
- .4byte _08056D1C
- .4byte _08056D26
- .4byte _08056D38
-_08056D04:
- bl InitOverworldBgs
- bl sub_8111F14
- movs r0, 0
- bl sub_8057024
- bl sub_8057100
- bl sub_8057114
- b _08056D30
-_08056D1C:
- bl sub_8056F08
- bl SetHelpContextForMap
- b _08056D30
-_08056D26:
- bl map_post_load_hook_exec
- lsls r0, 24
- cmp r0, 0
- beq _08056D3C
-_08056D30:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _08056D3C
-_08056D38:
- movs r0, 0x1
- b _08056D3E
-_08056D3C:
- movs r0, 0
-_08056D3E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8056CD8
-
- thumb_func_start map_loading_iteration_2_link
-map_loading_iteration_2_link: @ 8056D44
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0xD
- bls _08056D50
- b _08056E54
-_08056D50:
- lsls r0, 2
- ldr r1, _08056D5C @ =_08056D60
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08056D5C: .4byte _08056D60
- .align 2, 0
-_08056D60:
- .4byte _08056D98
- .4byte _08056DA2
- .4byte _08056DAE
- .4byte _08056DC0
- .4byte _08056DCA
- .4byte _08056DD0
- .4byte _08056DE0
- .4byte _08056DF0
- .4byte _08056E0C
- .4byte _08056E12
- .4byte _08056E3E
- .4byte _08056E18
- .4byte _08056E34
- .4byte _08056E46
-_08056D98:
- bl InitOverworldBgs
- bl FieldClearVBlankHBlankCallbacks
- b _08056E3E
-_08056DA2:
- bl sub_8111F14
- movs r0, 0x1
- bl sub_8057024
- b _08056E3E
-_08056DAE:
- bl sub_8057230
- bl sub_8057100
- bl sub_805715C
- bl SetHelpContextForMap
- b _08056E3E
-_08056DC0:
- bl InitCurrentFlashLevelScanlineEffect
- bl sub_8056F1C
- b _08056E3E
-_08056DCA:
- bl move_tilemap_camera_to_upper_left_corner
- b _08056E3E
-_08056DD0:
- ldr r0, _08056DDC @ =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset1_to_vram
- b _08056E3E
- .align 2, 0
-_08056DDC: .4byte gMapHeader
-_08056DE0:
- ldr r0, _08056DEC @ =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset2_to_vram
- b _08056E3E
- .align 2, 0
-_08056DEC: .4byte gMapHeader
-_08056DF0:
- bl FreeTempTileDataBuffersIfPossible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08056E54
- ldr r0, _08056E08 @ =gMapHeader
- ldr r0, [r0]
- bl apply_map_tileset1_tileset2_palette
- b _08056E3E
- .align 2, 0
-_08056E08: .4byte gMapHeader
-_08056E0C:
- bl DrawWholeMapView
- b _08056E3E
-_08056E12:
- bl InitTilesetAnimations
- b _08056E3E
-_08056E18:
- ldr r0, _08056E30 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _08056E3E
- bl LoadWirelessStatusIndicatorSpriteGfx
- movs r0, 0
- movs r1, 0
- bl CreateWirelessStatusIndicatorSprite
- b _08056E3E
- .align 2, 0
-_08056E30: .4byte gWirelessCommType
-_08056E34:
- bl map_post_load_hook_exec
- lsls r0, 24
- cmp r0, 0
- beq _08056E54
-_08056E3E:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _08056E54
-_08056E46:
- bl SetFieldVBlankCallback
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
- b _08056E56
-_08056E54:
- movs r0, 0
-_08056E56:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end map_loading_iteration_2_link
-
- thumb_func_start do_load_map_stuff_loop
-do_load_map_stuff_loop: @ 8056E5C
- push {r4,lr}
- adds r4, r0, 0
-_08056E60:
- adds r0, r4, 0
- movs r1, 0
- bl sub_8056B78
- cmp r0, 0
- beq _08056E60
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end do_load_map_stuff_loop
-
- thumb_func_start MoveSaveBlocks_ResetHeap_
-MoveSaveBlocks_ResetHeap_: @ 8056E74
- push {lr}
- bl MoveSaveBlocks_ResetHeap
- pop {r0}
- bx r0
- thumb_func_end MoveSaveBlocks_ResetHeap_
-
- thumb_func_start sub_8056E80
-sub_8056E80: @ 8056E80
- push {r4-r7,lr}
- sub sp, 0x4
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- bl ScanlineEffect_Stop
- ldr r2, _08056EF8 @ =0x05000002
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, _08056EFC @ =0x040000d4
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- ldr r0, _08056F00 @ =0x810001ff
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r2, 0xC0
- lsls r2, 19
- movs r3, 0xC0
- lsls r3, 9
- mov r4, sp
- movs r6, 0
- movs r5, 0x80
- lsls r5, 5
- ldr r7, _08056F04 @ =0x81000800
- movs r0, 0x81
- lsls r0, 24
- mov r12, r0
-_08056EBE:
- strh r6, [r4]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- str r7, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r2, r5
- subs r3, r5
- cmp r3, r5
- bhi _08056EBE
- strh r6, [r4]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- lsrs r0, r3, 1
- mov r2, r12
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r0, 0
- movs r1, 0x80
- bl ResetOamRange
- bl LoadOam
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08056EF8: .4byte 0x05000002
-_08056EFC: .4byte 0x040000d4
-_08056F00: .4byte 0x810001ff
-_08056F04: .4byte 0x81000800
- thumb_func_end sub_8056E80
-
- thumb_func_start sub_8056F08
-sub_8056F08: @ 8056F08
- push {lr}
- bl InitCurrentFlashLevelScanlineEffect
- bl sub_8056F1C
- bl mapdata_load_assets_to_gpu_and_full_redraw
- pop {r0}
- bx r0
- thumb_func_end sub_8056F08
-
- thumb_func_start sub_8056F1C
-sub_8056F1C: @ 8056F1C
- push {r4,lr}
- bl ClearScheduledBgCopiesToVram
- bl ResetTempTileDataBuffers
- movs r0, 0x4C
- movs r1, 0
- bl SetGpuReg
- ldr r1, _0805700C @ =0x00001f1f
- movs r0, 0x48
- bl SetGpuReg
- ldr r1, _08057010 @ =0x00000101
- movs r0, 0x4A
- bl SetGpuReg
- movs r0, 0x40
- movs r1, 0xFF
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0xFF
- bl SetGpuReg
- ldr r4, _08057014 @ =0x0000ffff
- movs r0, 0x42
- adds r1, r4, 0
- bl SetGpuReg
- movs r0, 0x46
- adds r1, r4, 0
- bl SetGpuReg
- ldr r0, _08057018 @ =gBLDCNTTarget2BGFlags
- ldrh r1, [r0, 0x2]
- ldrh r2, [r0, 0x4]
- orrs r1, r2
- ldrh r0, [r0, 0x6]
- orrs r1, r0
- movs r2, 0x82
- lsls r2, 5
- adds r0, r2, 0
- orrs r1, r0
- movs r0, 0x50
- bl SetGpuReg
- ldr r1, _0805701C @ =0x0000070d
- movs r0, 0x52
- bl SetGpuReg
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- movs r0, 0x3
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08057020 @ =0x00007060
- movs r0, 0
- bl SetGpuReg
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- 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, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805700C: .4byte 0x00001f1f
-_08057010: .4byte 0x00000101
-_08057014: .4byte 0x0000ffff
-_08057018: .4byte gBLDCNTTarget2BGFlags
-_0805701C: .4byte 0x0000070d
-_08057020: .4byte 0x00007060
- thumb_func_end sub_8056F1C
-
- thumb_func_start sub_8057024
-sub_8057024: @ 8057024
- push {r4,lr}
- adds r4, r0, 0
- bl ResetTasks
- bl ResetSpriteData
- bl ResetPaletteFade
- bl ScanlineEffect_Clear
- bl ResetAllPicSprites
- bl ResetCameraUpdateInfo
- bl InstallCameraPanAheadCallback
- cmp r4, 0
- bne _08057050
- movs r0, 0
- bl InitObjectEventPalettes
- b _08057056
-_08057050:
- movs r0, 0x1
- bl InitObjectEventPalettes
-_08057056:
- bl FieldEffectActiveListClear
- bl StartWeather
- bl ResumePausedWeather
- cmp r4, 0
- bne _0805706A
- bl SetUpFieldTasks
-_0805706A:
- bl mapheader_run_script_with_tag_x5
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8057024
-
- thumb_func_start sub_8057074
-sub_8057074: @ 8057074
- push {lr}
- ldr r0, _08057094 @ =gTotalCameraPixelOffsetX
- movs r1, 0
- strh r1, [r0]
- ldr r0, _08057098 @ =gTotalCameraPixelOffsetY
- strh r1, [r0]
- bl ResetObjectEvents
- movs r0, 0
- movs r1, 0
- bl TrySpawnObjectEvents
- bl mapheader_run_first_tag4_script_list_match
- pop {r0}
- bx r0
- .align 2, 0
-_08057094: .4byte gTotalCameraPixelOffsetX
-_08057098: .4byte gTotalCameraPixelOffsetY
- thumb_func_end sub_8057074
-
- thumb_func_start mli4_mapscripts_and_other
-mli4_mapscripts_and_other: @ 805709C
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r0, _080570F4 @ =gTotalCameraPixelOffsetX
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080570F8 @ =gTotalCameraPixelOffsetY
- strh r1, [r0]
- bl ResetObjectEvents
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetCameraFocusCoords
- bl sub_8055A6C
- adds r5, r0, 0
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- ldrb r2, [r5, 0x1]
- ldr r3, _080570FC @ =gSaveBlock2Ptr
- ldr r3, [r3]
- ldrb r3, [r3, 0x8]
- bl InitPlayerAvatar
- ldrb r0, [r5]
- bl SetPlayerAvatarTransitionFlags
- bl ResetInitialPlayerAvatarState
- movs r0, 0
- movs r1, 0
- bl TrySpawnObjectEvents
- bl mapheader_run_first_tag4_script_list_match
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080570F4: .4byte gTotalCameraPixelOffsetX
-_080570F8: .4byte gTotalCameraPixelOffsetY
-_080570FC: .4byte gSaveBlock2Ptr
- thumb_func_end mli4_mapscripts_and_other
-
- thumb_func_start sub_8057100
-sub_8057100: @ 8057100
- push {lr}
- movs r0, 0
- movs r1, 0
- bl sub_805EDF0
- bl mapheader_run_script_with_tag_x7
- pop {r0}
- bx r0
- thumb_func_end sub_8057100
-
- thumb_func_start sub_8057114
-sub_8057114: @ 8057114
- push {lr}
- ldr r2, _08057138 @ =gObjectEvents
- ldr r3, _0805713C @ =gPlayerAvatar
- ldrb r1, [r3, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0, 0x1]
- ldrb r0, [r3, 0x4]
- bl InitCameraUpdateCallback
- pop {r0}
- bx r0
- .align 2, 0
-_08057138: .4byte gObjectEvents
-_0805713C: .4byte gPlayerAvatar
- thumb_func_end sub_8057114
-
- thumb_func_start sub_8057140
-sub_8057140: @ 8057140
- push {lr}
- ldr r0, _08057158 @ =gLocalLinkPlayerId
- ldrb r0, [r0]
- bl sub_8058504
- lsls r0, 24
- lsrs r0, 24
- bl InitCameraUpdateCallback
- pop {r0}
- bx r0
- .align 2, 0
-_08057158: .4byte gLocalLinkPlayerId
- thumb_func_end sub_8057140
-
- thumb_func_start sub_805715C
-sub_805715C: @ 805715C
- push {lr}
- ldr r0, _08057174 @ =gLocalLinkPlayerId
- ldrb r0, [r0]
- bl sub_8058504
- lsls r0, 24
- lsrs r0, 24
- bl InitCameraUpdateCallback
- pop {r0}
- bx r0
- .align 2, 0
-_08057174: .4byte gLocalLinkPlayerId
- thumb_func_end sub_805715C
-
- thumb_func_start sub_8057178
-sub_8057178: @ 8057178
- push {r4,lr}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetCameraFocusCoords
- mov r2, sp
- ldr r0, _080571A4 @ =gLocalLinkPlayerId
- ldrb r1, [r0]
- ldrh r0, [r2]
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r4]
- bl SetCameraFocusCoords
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080571A4: .4byte gLocalLinkPlayerId
- thumb_func_end sub_8057178
-
- thumb_func_start sub_80571A8
-sub_80571A8: @ 80571A8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetCameraFocusCoords
- mov r3, sp
- mov r2, sp
- ldr r0, _08057224 @ =gLocalLinkPlayerId
- ldrb r1, [r0]
- ldrh r0, [r2]
- subs r0, r1
- strh r0, [r3]
- movs r6, 0
- ldr r0, _08057228 @ =gFieldLinkPlayerCount
- mov r8, r4
- ldrb r0, [r0]
- cmp r6, r0
- bcs _08057212
- ldr r7, _0805722C @ =gLinkPlayers
-_080571D8:
- lsls r5, r6, 24
- lsrs r5, 24
- mov r0, sp
- ldrh r1, [r0]
- adds r1, r6, r1
- lsls r1, 16
- asrs r1, 16
- mov r0, r8
- movs r3, 0
- ldrsh r2, [r0, r3]
- lsls r4, r6, 3
- subs r4, r6
- lsls r4, 2
- adds r4, r7
- ldrb r3, [r4, 0x13]
- adds r0, r5, 0
- bl SpawnLinkPlayerObjectEvent
- ldrb r1, [r4]
- adds r0, r5, 0
- bl sub_8058878
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, _08057228 @ =gFieldLinkPlayerCount
- ldrb r0, [r0]
- cmp r6, r0
- bcc _080571D8
-_08057212:
- bl sub_80578EC
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08057224: .4byte gLocalLinkPlayerId
-_08057228: .4byte gFieldLinkPlayerCount
-_0805722C: .4byte gLinkPlayers
- thumb_func_end sub_80571A8
-
- thumb_func_start sub_8057230
-sub_8057230: @ 8057230
- push {r4,r5,lr}
- movs r4, 0
- ldr r0, _08057264 @ =gFieldLinkPlayerCount
- ldrb r0, [r0]
- cmp r4, r0
- bcs _0805725E
- ldr r5, _08057268 @ =gLinkPlayers
-_0805723E:
- lsls r0, r4, 24
- lsrs r0, 24
- lsls r1, r4, 3
- subs r1, r4
- lsls r1, 2
- adds r1, r5
- ldrb r1, [r1]
- bl sub_8058878
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, _08057264 @ =gFieldLinkPlayerCount
- ldrb r0, [r0]
- cmp r4, r0
- bcc _0805723E
-_0805725E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08057264: .4byte gFieldLinkPlayerCount
-_08057268: .4byte gLinkPlayers
- thumb_func_end sub_8057230
-
- thumb_func_start sub_805726C
-sub_805726C: @ 805726C
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- ldr r1, _08057298 @ =gUnknown_2036E28
- movs r0, 0x1
- strb r0, [r1]
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- movs r0, 0
- bl SetMainCallback1
- ldr r0, _0805729C @ =CB2_DoChangeMap
- bl SetMainCallback2
- ldr r1, _080572A0 @ =gMain
- ldr r0, _080572A4 @ =sub_80572D8
- str r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_08057298: .4byte gUnknown_2036E28
-_0805729C: .4byte CB2_DoChangeMap
-_080572A0: .4byte gMain
-_080572A4: .4byte sub_80572D8
- thumb_func_end sub_805726C
-
- thumb_func_start sub_80572A8
-sub_80572A8: @ 80572A8
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- ldr r0, _080572D0 @ =gUnknown_2036E28
- movs r1, 0x1
- strb r1, [r0]
- bl set_current_map_header_from_sav1
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- movs r0, 0
- bl SetMainCallback1
- ldr r0, _080572D4 @ =sub_80572D8
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_080572D0: .4byte gUnknown_2036E28
-_080572D4: .4byte sub_80572D8
- thumb_func_end sub_80572A8
-
- thumb_func_start sub_80572D8
-sub_80572D8: @ 80572D8
- push {lr}
- ldr r0, _080572F4 @ =gMain + 0x438
- bl sub_8057300
- bl SetFieldVBlankCallback
- ldr r0, _080572F8 @ =CB1_Overworld
- bl SetMainCallback1
- ldr r0, _080572FC @ =sub_80565B4
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_080572F4: .4byte gMain + 0x438
-_080572F8: .4byte CB1_Overworld
-_080572FC: .4byte sub_80565B4
- thumb_func_end sub_80572D8
-
- thumb_func_start sub_8057300
-sub_8057300: @ 8057300
- push {r4,lr}
- adds r4, r0, 0
-_08057304:
- adds r0, r4, 0
- bl sub_8057314
- cmp r0, 0
- beq _08057304
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8057300
-
- thumb_func_start sub_8057314
-sub_8057314: @ 8057314
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0xA
- bls _08057320
- b _0805741A
-_08057320:
- lsls r0, 2
- ldr r1, _0805732C @ =_08057330
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0805732C: .4byte _08057330
- .align 2, 0
-_08057330:
- .4byte _0805735C
- .4byte _080573A0
- .4byte _080573A6
- .4byte _080573AE
- .4byte _080573B8
- .4byte _080573C2
- .4byte _080573C8
- .4byte _080573D8
- .4byte _080573E8
- .4byte _08057404
- .4byte _0805740A
-_0805735C:
- bl InitOverworldBgs
- bl FieldClearVBlankHBlankCallbacks
- bl sub_8111F14
- bl sub_81113E4
- bl sub_8111438
- bl sub_8110AC8
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _08057390
- ldr r1, _0805738C @ =gUnknown_2031DE0
- movs r0, 0
- strb r0, [r1]
- movs r0, 0
- bl sub_8055920
- b _08057412
- .align 2, 0
-_0805738C: .4byte gUnknown_2031DE0
-_08057390:
- ldr r1, _0805739C @ =gUnknown_2031DE0
- movs r0, 0x1
- strb r0, [r1]
- bl sub_80559A8
- b _08057412
- .align 2, 0
-_0805739C: .4byte gUnknown_2031DE0
-_080573A0:
- bl sub_8110FCC
- b _08057412
-_080573A6:
- movs r0, 0
- bl sub_8057024
- b _08057412
-_080573AE:
- bl sub_8057100
- bl sub_8057114
- b _08057412
-_080573B8:
- bl InitCurrentFlashLevelScanlineEffect
- bl sub_8056F1C
- b _08057412
-_080573C2:
- bl move_tilemap_camera_to_upper_left_corner
- b _08057412
-_080573C8:
- ldr r0, _080573D4 @ =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset1_to_vram
- b _08057412
- .align 2, 0
-_080573D4: .4byte gMapHeader
-_080573D8:
- ldr r0, _080573E4 @ =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset2_to_vram
- b _08057412
- .align 2, 0
-_080573E4: .4byte gMapHeader
-_080573E8:
- bl FreeTempTileDataBuffersIfPossible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08057428
- ldr r0, _08057400 @ =gMapHeader
- ldr r0, [r0]
- bl apply_map_tileset1_tileset2_palette
- b _08057412
- .align 2, 0
-_08057400: .4byte gMapHeader
-_08057404:
- bl DrawWholeMapView
- b _08057412
-_0805740A:
- bl InitTilesetAnimations
- bl sub_815A540
-_08057412:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _08057428
-_0805741A:
- bl map_post_load_hook_exec
- lsls r0, 24
- cmp r0, 0
- beq _08057428
- movs r0, 0x1
- b _0805742A
-_08057428:
- movs r0, 0
-_0805742A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8057314
-
- thumb_func_start sub_8057430
-sub_8057430: @ 8057430
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- bl StopMapMusic
- ldr r1, _08057484 @ =gUnknown_2036E28
- movs r0, 0x3
- strb r0, [r1]
- bl sub_8056420
- bl set_current_map_header_from_sav1
- bl sub_80550A8
- bl UnfreezeObjectEvents
- bl sub_8054E40
- bl InitMapFromSavedGame
- bl PlayTimeCounter_Start
- bl ScriptContext1_Init
- ldr r1, _08057488 @ =gUnknown_2031DE0
- movs r0, 0x1
- strb r0, [r1]
- bl sav2_x1_query_bit1
- cmp r0, 0x1
- bne _08057490
- bl sav2_x9_clear_bit1
- bl warp1_set_to_sav1w
- bl WarpIntoMap
- ldr r0, _0805748C @ =CB2_LoadMap
- bl SetMainCallback2
- b _0805749A
- .align 2, 0
-_08057484: .4byte gUnknown_2036E28
-_08057488: .4byte gUnknown_2031DE0
-_0805748C: .4byte CB2_LoadMap
-_08057490:
- ldr r0, _080574A0 @ =CB1_Overworld
- bl SetMainCallback1
- bl CB2_ReturnToField
-_0805749A:
- pop {r0}
- bx r0
- .align 2, 0
-_080574A0: .4byte CB1_Overworld
- thumb_func_end sub_8057430
-
- thumb_func_start Overworld_CreditsMainCB
-Overworld_CreditsMainCB: @ 80574A4
- push {r4,lr}
- ldr r0, _080574E8 @ =gPaletteFade
- ldrb r0, [r0, 0x7]
- lsrs r0, 7
- adds r4, r0, 0
- cmp r4, 0
- beq _080574B8
- movs r0, 0
- bl SetVBlankCallback
-_080574B8:
- bl RunTasks
- bl AnimateSprites
- bl sub_805ACF0
- bl UpdateCameraPanning
- bl BuildOamBuffer
- bl UpdatePaletteFade
- bl UpdateTilesetAnimations
- bl DoScheduledBgTilemapCopiesToVram
- cmp r4, 0
- beq _080574E0
- bl SetFieldVBlankCallback
-_080574E0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080574E8: .4byte gPaletteFade
- thumb_func_end Overworld_CreditsMainCB
-
- thumb_func_start sub_80574EC
-sub_80574EC: @ 80574EC
- push {lr}
- ldr r0, _08057500 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08057504
- movs r0, 0
- b _08057506
- .align 2, 0
-_08057500: .4byte gPaletteFade
-_08057504:
- movs r0, 0x1
-_08057506:
- pop {r1}
- bx r1
- thumb_func_end sub_80574EC
-
- thumb_func_start Overworld_DoScrollSceneForCredits
-Overworld_DoScrollSceneForCredits: @ 805750C
- push {lr}
- ldr r3, _08057520 @ =gUnknown_2031DE4
- str r1, [r3]
- ldr r1, _08057524 @ =gUnknown_2036E28
- strb r2, [r1]
- movs r1, 0
- bl sub_8057528
- pop {r1}
- bx r1
- .align 2, 0
-_08057520: .4byte gUnknown_2031DE4
-_08057524: .4byte gUnknown_2036E28
- thumb_func_end Overworld_DoScrollSceneForCredits
-
- thumb_func_start sub_8057528
-sub_8057528: @ 8057528
- push {r4-r7,lr}
- adds r7, r0, 0
- ldrb r1, [r7]
- cmp r1, 0x1
- beq _08057560
- cmp r1, 0x1
- bgt _0805753C
- cmp r1, 0
- beq _08057546
- b _08057648
-_0805753C:
- cmp r1, 0x2
- beq _08057620
- cmp r1, 0x3
- beq _0805762C
- b _08057648
-_08057546:
- ldr r0, _08057558 @ =gUnknown_2031DEA
- strh r1, [r0]
- ldr r0, _0805755C @ =gUnknown_2031DE8
- strh r1, [r0]
-_0805754E:
- ldrb r0, [r7]
- adds r0, 0x1
- strb r0, [r7]
- b _08057648
- .align 2, 0
-_08057558: .4byte gUnknown_2031DEA
-_0805755C: .4byte gUnknown_2031DE8
-_08057560:
- ldr r3, _080575F0 @ =gUnknown_2031DEA
- movs r0, 0
- ldrsh r1, [r3, r0]
- ldr r0, _080575F4 @ =gUnknown_2031DE4
- ldr r4, [r0]
- lsls r1, 3
- adds r1, r4
- ldrb r2, [r1, 0x2]
- ldr r0, _080575F8 @ =0xffffff00
- ands r0, r5
- orrs r0, r2
- ldrb r1, [r1, 0x4]
- lsls r1, 8
- ldr r2, _080575FC @ =0xffff00ff
- ands r0, r2
- adds r5, r0, 0
- orrs r5, r1
- movs r0, 0xFF
- lsls r0, 16
- orrs r5, r0
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
- movs r2, 0
- ldrsh r1, [r3, r2]
- lsls r1, 3
- adds r1, r4
- ldrh r2, [r1]
- ldr r0, _08057600 @ =0xffff0000
- ands r0, r6
- orrs r0, r2
- ldrh r1, [r1, 0x2]
- lsls r1, 16
- ldr r2, _08057604 @ =0x0000ffff
- ands r0, r2
- adds r6, r0, 0
- orrs r6, r1
- ldr r0, _08057608 @ =gUnknown_2031DBC
- str r5, [r0]
- str r6, [r0, 0x4]
- ldr r1, _0805760C @ =gUnknown_2031DE8
- movs r2, 0
- ldrsh r0, [r3, r2]
- lsls r0, 3
- adds r0, r4
- ldrh r0, [r0, 0x4]
- strh r0, [r1]
- bl WarpIntoMap
- ldr r2, _08057610 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- movs r0, 0
- bl SetMainCallback1
- ldr r1, _08057614 @ =gFieldCallback2
- ldr r0, _08057618 @ =sub_80574EC
- str r0, [r1]
- ldr r0, _0805761C @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- b _0805754E
- .align 2, 0
-_080575F0: .4byte gUnknown_2031DEA
-_080575F4: .4byte gUnknown_2031DE4
-_080575F8: .4byte 0xffffff00
-_080575FC: .4byte 0xffff00ff
-_08057600: .4byte 0xffff0000
-_08057604: .4byte 0x0000ffff
-_08057608: .4byte gUnknown_2031DBC
-_0805760C: .4byte gUnknown_2031DE8
-_08057610: .4byte gPaletteFade
-_08057614: .4byte gFieldCallback2
-_08057618: .4byte sub_80574EC
-_0805761C: .4byte gMain
-_08057620:
- bl sub_8057650
- lsls r0, 24
- cmp r0, 0
- beq _08057648
- b _0805754E
-_0805762C:
- ldr r0, _08057640 @ =gFieldCamera
- ldr r1, _08057644 @ =sub_8057748
- str r1, [r0]
- bl SetFieldVBlankCallback
- movs r0, 0
- strb r0, [r7]
- movs r0, 0x1
- b _0805764A
- .align 2, 0
-_08057640: .4byte gFieldCamera
-_08057644: .4byte sub_8057748
-_08057648:
- movs r0, 0
-_0805764A:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8057528
-
- thumb_func_start sub_8057650
-sub_8057650: @ 8057650
- push {r4,lr}
- ldr r4, _08057664 @ =gMain + 0x438
- ldrb r0, [r4]
- cmp r0, 0x8
- bhi _0805773C
- lsls r0, 2
- ldr r1, _08057668 @ =_0805766C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08057664: .4byte gMain + 0x438
-_08057668: .4byte _0805766C
- .align 2, 0
-_0805766C:
- .4byte _08057690
- .4byte _0805769C
- .4byte _080576C2
- .4byte _080576CC
- .4byte _080576D2
- .4byte _080576E0
- .4byte _080576F0
- .4byte _0805770C
- .4byte _08057712
-_08057690:
- bl sub_8056354
- movs r0, 0
- bl sub_8055920
- b _0805772A
-_0805769C:
- bl ScanlineEffect_Clear
- bl ResetAllPicSprites
- bl ResetCameraUpdateInfo
- bl InstallCameraPanAheadCallback
- bl FieldEffectActiveListClear
- bl StartWeather
- bl ResumePausedWeather
- bl SetUpFieldTasks
- bl mapheader_run_script_with_tag_x5
- b _0805772A
-_080576C2:
- bl InitCurrentFlashLevelScanlineEffect
- bl sub_8056F1C
- b _0805772A
-_080576CC:
- bl move_tilemap_camera_to_upper_left_corner
- b _0805772A
-_080576D2:
- ldr r0, _080576DC @ =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset1_to_vram
- b _0805772A
- .align 2, 0
-_080576DC: .4byte gMapHeader
-_080576E0:
- ldr r0, _080576EC @ =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset2_to_vram
- b _0805772A
- .align 2, 0
-_080576EC: .4byte gMapHeader
-_080576F0:
- bl FreeTempTileDataBuffersIfPossible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08057740
- ldr r0, _08057708 @ =gMapHeader
- ldr r0, [r0]
- bl apply_map_tileset1_tileset2_palette
- b _0805772A
- .align 2, 0
-_08057708: .4byte gMapHeader
-_0805770C:
- bl DrawWholeMapView
- b _0805772A
-_08057712:
- bl InitTilesetAnimations
- ldr r2, _08057734 @ =gPaletteFade
- ldrb r1, [r2, 0x8]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2, 0x8]
- ldr r2, _08057738 @ =0x3fffffff
- movs r0, 0
- movs r1, 0
- bl FadeSelectedPals
-_0805772A:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _08057740
- .align 2, 0
-_08057734: .4byte gPaletteFade
-_08057738: .4byte 0x3fffffff
-_0805773C:
- movs r0, 0x1
- b _08057742
-_08057740:
- movs r0, 0
-_08057742:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8057650
-
- thumb_func_start sub_8057748
-sub_8057748: @ 8057748
- push {r4-r6,lr}
- adds r2, r0, 0
- ldr r0, _08057784 @ =gUnknown_2031DE8
- movs r3, 0
- ldrsh r1, [r0, r3]
- adds r5, r0, 0
- ldr r4, _08057788 @ =gUnknown_2031DEA
- ldr r6, _0805778C @ =gUnknown_2031DE4
- cmp r1, 0
- bne _080577F4
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- movs r1, 0
- ldrsh r0, [r4, r1]
- ldr r1, [r6]
- lsls r0, 3
- adds r3, r0, r1
- ldrh r0, [r3]
- subs r0, 0xFB
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bhi _080577D4
- lsls r0, 2
- ldr r1, _08057790 @ =_08057794
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08057784: .4byte gUnknown_2031DE8
-_08057788: .4byte gUnknown_2031DEA
-_0805778C: .4byte gUnknown_2031DE4
-_08057790: .4byte _08057794
- .align 2, 0
-_08057794:
- .4byte _080577C0
- .4byte _08057814
- .4byte _080577CA
- .4byte _08057814
- .4byte _080577A8
-_080577A8:
- movs r0, 0
- str r0, [r2, 0x8]
- str r0, [r2, 0xC]
- str r0, [r2]
- ldr r0, _080577BC @ =sub_805781C
- movs r1, 0
- bl CreateTask
- b _08057814
- .align 2, 0
-_080577BC: .4byte sub_805781C
-_080577C0:
- movs r0, 0
- str r0, [r2, 0x8]
- str r0, [r2, 0xC]
- str r0, [r2]
- b _080577F4
-_080577CA:
- movs r0, 0
- str r0, [r2, 0x8]
- str r0, [r2, 0xC]
- str r0, [r2]
- b _08057814
-_080577D4:
- ldrh r0, [r3, 0x4]
- strh r0, [r5]
- movs r3, 0
- ldrsh r0, [r4, r3]
- lsls r0, 3
- adds r0, r1
- movs r3, 0
- ldrsh r0, [r0, r3]
- str r0, [r2, 0x8]
- movs r3, 0
- ldrsh r0, [r4, r3]
- lsls r0, 3
- adds r0, r1
- movs r1, 0x2
- ldrsh r0, [r0, r1]
- str r0, [r2, 0xC]
-_080577F4:
- movs r3, 0
- ldrsh r0, [r4, r3]
- ldr r1, [r6]
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0xFF
- bne _0805780E
- movs r0, 0
- str r0, [r2, 0x8]
- str r0, [r2, 0xC]
- b _08057814
-_0805780E:
- ldrh r0, [r5]
- subs r0, 0x1
- strh r0, [r5]
-_08057814:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8057748
-
- thumb_func_start sub_805781C
-sub_805781C: @ 805781C
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0805784C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08057850 @ =sub_8057854
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805784C: .4byte gTasks
-_08057850: .4byte sub_8057854
- thumb_func_end sub_805781C
-
- thumb_func_start sub_8057854
-sub_8057854: @ 8057854
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0805787C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08057876
- bl CleanupOverworldWindowsAndTilemaps
- ldr r0, _08057880 @ =CB2_LoadMap
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_08057876:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805787C: .4byte gPaletteFade
-_08057880: .4byte CB2_LoadMap
- thumb_func_end sub_8057854
-
- thumb_func_start c1_link_related
-c1_link_related: @ 8057884
- push {r4,lr}
- ldr r0, _080578C8 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _0805789E
- bl IsRfuRecvQueueEmpty
- cmp r0, 0
- beq _0805789E
- bl IsSendingKeysToLink
- cmp r0, 0
- bne _080578C0
-_0805789E:
- ldr r0, _080578CC @ =gLocalLinkPlayerId
- ldrb r4, [r0]
- ldr r0, _080578D0 @ =gLinkPartnersHeldKeys
- adds r1, r4, 0
- bl sub_8057BE4
- ldr r0, _080578D4 @ =gUnknown_3000E84
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 16
- lsrs r0, 16
- bl sub_8057C4C
- bl sub_80578EC
-_080578C0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080578C8: .4byte gWirelessCommType
-_080578CC: .4byte gLocalLinkPlayerId
-_080578D0: .4byte gLinkPartnersHeldKeys
-_080578D4: .4byte gUnknown_3000E84
- thumb_func_end c1_link_related
-
- thumb_func_start sub_80578D8
-sub_80578D8: @ 80578D8
- push {lr}
- bl sub_805793C
- ldr r0, _080578E8 @ =sub_8057D5C
- bl c1_link_related_func_set
- pop {r0}
- bx r0
- .align 2, 0
-_080578E8: .4byte sub_8057D5C
- thumb_func_end sub_80578D8
-
- thumb_func_start sub_80578EC
-sub_80578EC: @ 80578EC
- push {lr}
- ldr r0, _080578F8 @ =gLinkPartnersHeldKeys
- bl sub_8057D48
- pop {r0}
- bx r0
- .align 2, 0
-_080578F8: .4byte gLinkPartnersHeldKeys
- thumb_func_end sub_80578EC
-
- thumb_func_start c1_link_related_func_set
-c1_link_related_func_set: @ 80578FC
- ldr r2, _08057908 @ =gUnknown_3000E89
- movs r1, 0
- strb r1, [r2]
- ldr r1, _0805790C @ =gUnknown_3000E84
- str r0, [r1]
- bx lr
- .align 2, 0
-_08057908: .4byte gUnknown_3000E89
-_0805790C: .4byte gUnknown_3000E84
- thumb_func_end c1_link_related_func_set
-
- thumb_func_start sub_8057910
-sub_8057910: @ 8057910
- push {lr}
- ldr r0, _08057934 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _0805792E
- ldr r1, _08057938 @ =gUnknown_3000E89
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3C
- bls _0805792E
- bl LinkRfu_FatalError
-_0805792E:
- pop {r0}
- bx r0
- .align 2, 0
-_08057934: .4byte gWirelessCommType
-_08057938: .4byte gUnknown_3000E89
- thumb_func_end sub_8057910
-
- thumb_func_start sub_805793C
-sub_805793C: @ 805793C
- push {lr}
- ldr r1, _08057950 @ =gUnknown_3000E80
- movs r2, 0x80
- adds r0, r1, 0x3
-_08057944:
- strb r2, [r0]
- subs r0, 0x1
- cmp r0, r1
- bge _08057944
- pop {r0}
- bx r0
- .align 2, 0
-_08057950: .4byte gUnknown_3000E80
- thumb_func_end sub_805793C
-
- thumb_func_start sub_8057954
-sub_8057954: @ 8057954
- push {r4,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r0, _08057974 @ =gFieldLinkPlayerCount
- ldrb r2, [r0]
- movs r1, 0
- cmp r1, r2
- bge _08057982
- ldr r4, _08057978 @ =gUnknown_3000E80
-_08057966:
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, r3
- beq _0805797C
- movs r0, 0
- b _08057984
- .align 2, 0
-_08057974: .4byte gFieldLinkPlayerCount
-_08057978: .4byte gUnknown_3000E80
-_0805797C:
- adds r1, 0x1
- cmp r1, r2
- blt _08057966
-_08057982:
- movs r0, 0x1
-_08057984:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8057954
-
- thumb_func_start sub_805798C
-sub_805798C: @ 805798C
- push {r4,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r0, _080579AC @ =gFieldLinkPlayerCount
- ldrb r2, [r0]
- movs r1, 0
- cmp r1, r2
- bge _080579BA
- ldr r4, _080579B0 @ =gUnknown_3000E80
-_0805799E:
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, r3
- bne _080579B4
- movs r0, 0x1
- b _080579BC
- .align 2, 0
-_080579AC: .4byte gFieldLinkPlayerCount
-_080579B0: .4byte gUnknown_3000E80
-_080579B4:
- adds r1, 0x1
- cmp r1, r2
- blt _0805799E
-_080579BA:
- movs r0, 0
-_080579BC:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_805798C
-
- thumb_func_start sub_80579C4
-sub_80579C4: @ 80579C4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- adds r6, r2, 0
- mov r9, r3
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- ldr r0, _08057A14 @ =gUnknown_3000E80
- adds r5, r7, r0
- ldrb r0, [r5]
- cmp r0, 0x80
- beq _080579E4
- b _08057B5E
-_080579E4:
- adds r0, r6, 0
- bl sub_805801C
- adds r4, r0, 0
- cmp r4, 0
- beq _08057A1C
- bl sub_805812C
- mov r1, r9
- strh r0, [r1]
- movs r0, 0x81
- strb r0, [r5]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- bne _08057A04
- b _08057BD2
-_08057A04:
- ldr r0, _08057A18 @ =sub_8057DA4
- bl c1_link_related_func_set
- adds r0, r4, 0
- bl sub_80581DC
- b _08057BD2
- .align 2, 0
-_08057A14: .4byte gUnknown_3000E80
-_08057A18: .4byte sub_8057DA4
-_08057A1C:
- movs r0, 0x83
- bl sub_805798C
- cmp r0, 0x1
- bne _08057A44
- movs r0, 0x81
- strb r0, [r5]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- bne _08057A32
- b _08057BD2
-_08057A32:
- ldr r0, _08057A40 @ =sub_8057DA4
- bl c1_link_related_func_set
- bl sub_8058230
- b _08057BD2
- .align 2, 0
-_08057A40: .4byte sub_8057DA4
-_08057A44:
- mov r0, r8
- subs r0, 0x12
- cmp r0, 0xA
- bls _08057A4E
- b _08057B5E
-_08057A4E:
- lsls r0, 2
- ldr r1, _08057A58 @ =_08057A5C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08057A58: .4byte _08057A5C
- .align 2, 0
-_08057A5C:
- .4byte _08057AB4
- .4byte _08057B5E
- .4byte _08057B5E
- .4byte _08057B5E
- .4byte _08057B5E
- .4byte _08057B5E
- .4byte _08057A88
- .4byte _08057AE0
- .4byte _08057B5E
- .4byte _08057B10
- .4byte _08057B3C
-_08057A88:
- adds r0, r6, 0
- bl sub_8058004
- cmp r0, 0
- beq _08057B5E
- ldr r0, _08057AAC @ =gUnknown_3000E80
- adds r0, r7, r0
- movs r1, 0x81
- strb r1, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- beq _08057B5E
- ldr r0, _08057AB0 @ =sub_8057DA4
- bl c1_link_related_func_set
- bl sub_80581C8
- b _08057B5E
- .align 2, 0
-_08057AAC: .4byte gUnknown_3000E80
-_08057AB0: .4byte sub_8057DA4
-_08057AB4:
- adds r0, r6, 0
- bl sub_8058034
- cmp r0, 0x1
- bne _08057B5E
- ldr r0, _08057AD8 @ =gUnknown_3000E80
- adds r0, r7, r0
- movs r1, 0x81
- strb r1, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- beq _08057B5E
- ldr r0, _08057ADC @ =sub_8057DA4
- bl c1_link_related_func_set
- bl sub_80581F8
- b _08057B5E
- .align 2, 0
-_08057AD8: .4byte gUnknown_3000E80
-_08057ADC: .4byte sub_8057DA4
-_08057AE0:
- adds r0, r6, 0
- bl sub_8058060
- adds r4, r0, 0
- cmp r4, 0
- beq _08057B5E
- ldr r0, _08057B08 @ =gUnknown_3000E80
- adds r0, r7, r0
- movs r1, 0x81
- strb r1, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- beq _08057B5E
- ldr r0, _08057B0C @ =sub_8057DA4
- bl c1_link_related_func_set
- adds r0, r4, 0
- bl sub_8058214
- b _08057B5E
- .align 2, 0
-_08057B08: .4byte gUnknown_3000E80
-_08057B0C: .4byte sub_8057DA4
-_08057B10:
- adds r0, r6, 0
- bl sub_8057FEC
- cmp r0, 0
- beq _08057B5E
- ldr r0, _08057B34 @ =gUnknown_3000E80
- adds r0, r7, r0
- movs r1, 0x81
- strb r1, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- beq _08057B5E
- ldr r0, _08057B38 @ =sub_8057DC8
- bl c1_link_related_func_set
- bl sub_80581BC
- b _08057B5E
- .align 2, 0
-_08057B34: .4byte gUnknown_3000E80
-_08057B38: .4byte sub_8057DC8
-_08057B3C:
- adds r0, r6, 0
- bl sub_8057FEC
- cmp r0, 0
- beq _08057B5E
- ldr r0, _08057B70 @ =gUnknown_3000E80
- adds r0, r7, r0
- movs r1, 0x81
- strb r1, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- beq _08057B5E
- ldr r0, _08057B74 @ =sub_8057DEC
- bl c1_link_related_func_set
- bl sub_80581BC
-_08057B5E:
- mov r0, r8
- cmp r0, 0x17
- beq _08057B84
- cmp r0, 0x17
- bgt _08057B78
- cmp r0, 0x16
- beq _08057B94
- b _08057BD2
- .align 2, 0
-_08057B70: .4byte gUnknown_3000E80
-_08057B74: .4byte sub_8057DEC
-_08057B78:
- mov r1, r8
- cmp r1, 0x1A
- beq _08057BA4
- cmp r1, 0x1D
- beq _08057BC4
- b _08057BD2
-_08057B84:
- ldr r0, _08057B90 @ =gUnknown_3000E80
- adds r0, r7, r0
- movs r1, 0x83
- strb r1, [r0]
- b _08057BD2
- .align 2, 0
-_08057B90: .4byte gUnknown_3000E80
-_08057B94:
- ldr r0, _08057BA0 @ =gUnknown_3000E80
- adds r0, r7, r0
- movs r1, 0x82
- strb r1, [r0]
- b _08057BD2
- .align 2, 0
-_08057BA0: .4byte gUnknown_3000E80
-_08057BA4:
- ldr r0, _08057BBC @ =gUnknown_3000E80
- adds r0, r7, r0
- movs r1, 0x80
- strb r1, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- beq _08057BD2
- ldr r0, _08057BC0 @ =sub_8057D5C
- bl c1_link_related_func_set
- b _08057BD2
- .align 2, 0
-_08057BBC: .4byte gUnknown_3000E80
-_08057BC0: .4byte sub_8057D5C
-_08057BC4:
- ldr r0, _08057BE0 @ =gUnknown_3000E80
- adds r1, r7, r0
- ldrb r0, [r1]
- cmp r0, 0x82
- bne _08057BD2
- movs r0, 0x81
- strb r0, [r1]
-_08057BD2:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08057BE0: .4byte gUnknown_3000E80
- thumb_func_end sub_80579C4
-
- thumb_func_start sub_8057BE4
-sub_8057BE4: @ 8057BE4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- mov r8, r1
- movs r6, 0
- add r5, sp, 0x10
- mov r9, r5
- adds r7, r0, 0
-_08057BF8:
- ldrb r4, [r7]
- movs r0, 0
- strh r0, [r5]
- adds r0, r6, 0
- mov r1, r8
- mov r2, sp
- bl sub_8057F84
- adds r0, r6, 0
- adds r1, r4, 0
- mov r2, sp
- adds r3, r5, 0
- bl sub_80579C4
- ldr r0, _08057C48 @ =gUnknown_3000E80
- adds r0, r6, r0
- ldrb r0, [r0]
- cmp r0, 0x80
- bne _08057C28
- adds r0, r4, 0
- bl sub_8057D14
- mov r1, r9
- strh r0, [r1]
-_08057C28:
- lsls r0, r6, 24
- lsrs r0, 24
- ldrb r1, [r5]
- bl sub_8058618
- adds r7, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _08057BF8
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08057C48: .4byte gUnknown_3000E80
- thumb_func_end sub_8057BE4
-
- thumb_func_start sub_8057C4C
-sub_8057C4C: @ 8057C4C
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r1, _08057C64 @ =0xffef0000
- adds r0, r1
- lsrs r0, 16
- cmp r0, 0xC
- bhi _08057C6C
- ldr r0, _08057C68 @ =gHeldKeyCodeToSend
- strh r4, [r0]
- b _08057C72
- .align 2, 0
-_08057C64: .4byte 0xffef0000
-_08057C68: .4byte gHeldKeyCodeToSend
-_08057C6C:
- ldr r1, _08057CB0 @ =gHeldKeyCodeToSend
- movs r0, 0x11
- strh r0, [r1]
-_08057C72:
- ldr r0, _08057CB4 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _08057CA8
- bl sub_805833C
- cmp r0, 0x1
- bls _08057CA8
- bl IsUpdateLinkStateCBActive
- cmp r0, 0x1
- bne _08057CA8
- bl IsSendingKeysToLink
- cmp r0, 0x1
- bne _08057CA8
- cmp r4, 0x11
- blt _08057CA8
- cmp r4, 0x15
- ble _08057CA2
- cmp r4, 0x19
- bgt _08057CA8
- cmp r4, 0x18
- blt _08057CA8
-_08057CA2:
- ldr r1, _08057CB0 @ =gHeldKeyCodeToSend
- movs r0, 0
- strh r0, [r1]
-_08057CA8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08057CB0: .4byte gHeldKeyCodeToSend
-_08057CB4: .4byte gWirelessCommType
- thumb_func_end sub_8057C4C
-
- thumb_func_start sub_8057CB8
-sub_8057CB8: @ 8057CB8
- push {lr}
- ldr r2, _08057CCC @ =gMain
- ldrh r1, [r2, 0x2C]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08057CD0
- movs r0, 0x13
- b _08057D10
- .align 2, 0
-_08057CCC: .4byte gMain
-_08057CD0:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08057CDC
- movs r0, 0x12
- b _08057D10
-_08057CDC:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08057CE8
- movs r0, 0x14
- b _08057D10
-_08057CE8:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08057CF4
- movs r0, 0x15
- b _08057D10
-_08057CF4:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08057D02
- movs r0, 0x18
- b _08057D10
-_08057D02:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08057D0E
- movs r0, 0x11
- b _08057D10
-_08057D0E:
- movs r0, 0x19
-_08057D10:
- pop {r1}
- bx r1
- thumb_func_end sub_8057CB8
-
- thumb_func_start sub_8057D14
-sub_8057D14: @ 8057D14
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- adds r1, r0, 0
- cmp r0, 0x13
- beq _08057D3A
- cmp r0, 0x13
- bgt _08057D2A
- cmp r0, 0x12
- beq _08057D3E
- b _08057D42
-_08057D2A:
- cmp r1, 0x14
- beq _08057D36
- cmp r1, 0x15
- bne _08057D42
- movs r0, 0x4
- b _08057D44
-_08057D36:
- movs r0, 0x3
- b _08057D44
-_08057D3A:
- movs r0, 0x1
- b _08057D44
-_08057D3E:
- movs r0, 0x2
- b _08057D44
-_08057D42:
- movs r0, 0
-_08057D44:
- pop {r1}
- bx r1
- thumb_func_end sub_8057D14
-
- thumb_func_start sub_8057D48
-sub_8057D48: @ 8057D48
- push {lr}
- movs r2, 0x11
- adds r1, r0, 0x6
-_08057D4E:
- strh r2, [r1]
- subs r1, 0x2
- cmp r1, r0
- bge _08057D4E
- pop {r0}
- bx r0
- thumb_func_end sub_8057D48
-
- thumb_func_start sub_8057D5C
-sub_8057D5C: @ 8057D5C
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_IsEnabled
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08057D70
- movs r0, 0x11
- b _08057D92
-_08057D70:
- bl GetLinkRecvQueueLength
- cmp r0, 0x4
- bls _08057D7C
- movs r0, 0x1B
- b _08057D92
-_08057D7C:
- bl sub_805833C
- cmp r0, 0x4
- bls _08057D88
- movs r0, 0x1C
- b _08057D92
-_08057D88:
- adds r0, r4, 0
- bl sub_8057CB8
- lsls r0, 16
- lsrs r0, 16
-_08057D92:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8057D5C
-
- thumb_func_start sub_8057D98
-sub_8057D98: @ 8057D98
- push {lr}
- bl sub_8057910
- movs r0, 0x11
- pop {r1}
- bx r1
- thumb_func_end sub_8057D98
-
- thumb_func_start sub_8057DA4
-sub_8057DA4: @ 8057DA4
- push {r4,lr}
- bl ScriptContext2_IsEnabled
- lsls r0, 24
- lsrs r0, 24
- movs r4, 0x11
- cmp r0, 0x1
- beq _08057DBC
- movs r4, 0x1A
- ldr r0, _08057DC4 @ =sub_8057D98
- bl c1_link_related_func_set
-_08057DBC:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08057DC4: .4byte sub_8057D98
- thumb_func_end sub_8057DA4
-
- thumb_func_start sub_8057DC8
-sub_8057DC8: @ 8057DC8
- push {r4,lr}
- bl GetLinkRecvQueueLength
- movs r4, 0x11
- cmp r0, 0x2
- bhi _08057DE0
- movs r4, 0x1A
- bl ScriptContext2_Disable
- ldr r0, _08057DE8 @ =sub_8057D98
- bl c1_link_related_func_set
-_08057DE0:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08057DE8: .4byte sub_8057D98
- thumb_func_end sub_8057DC8
-
- thumb_func_start sub_8057DEC
-sub_8057DEC: @ 8057DEC
- push {r4,lr}
- bl sub_805833C
- movs r4, 0x11
- cmp r0, 0x2
- bhi _08057E04
- movs r4, 0x1A
- bl ScriptContext2_Disable
- ldr r0, _08057E0C @ =sub_8057D98
- bl c1_link_related_func_set
-_08057E04:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08057E0C: .4byte sub_8057D98
- thumb_func_end sub_8057DEC
-
- thumb_func_start sub_8057E10
-sub_8057E10: @ 8057E10
- push {lr}
- bl sub_8057910
- movs r0, 0x11
- pop {r1}
- bx r1
- thumb_func_end sub_8057E10
-
- thumb_func_start sub_8057E1C
-sub_8057E1C: @ 8057E1C
- push {lr}
- ldr r1, _08057E40 @ =gUnknown_3000E80
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x82
- bne _08057E4C
- ldr r0, _08057E44 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08057E50
- ldr r0, _08057E48 @ =sub_8057E10
- bl c1_link_related_func_set
- movs r0, 0x1D
- b _08057E52
- .align 2, 0
-_08057E40: .4byte gUnknown_3000E80
-_08057E44: .4byte gMain
-_08057E48: .4byte sub_8057E10
-_08057E4C:
- bl sub_8057910
-_08057E50:
- movs r0, 0x11
-_08057E52:
- pop {r1}
- bx r1
- thumb_func_end sub_8057E1C
-
- thumb_func_start sub_8057E58
-sub_8057E58: @ 8057E58
- push {lr}
- ldr r0, _08057E68 @ =sub_8057E1C
- bl c1_link_related_func_set
- movs r0, 0x16
- pop {r1}
- bx r1
- .align 2, 0
-_08057E68: .4byte sub_8057E1C
- thumb_func_end sub_8057E58
-
- thumb_func_start sub_8057E6C
-sub_8057E6C: @ 8057E6C
- movs r0, 0x11
- bx lr
- thumb_func_end sub_8057E6C
-
- thumb_func_start sub_8057E70
-sub_8057E70: @ 8057E70
- push {lr}
- ldr r1, _08057E9C @ =gUnknown_3000E80
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x83
- beq _08057E80
- bl sub_8057910
-_08057E80:
- movs r0, 0x83
- bl sub_8057954
- cmp r0, 0x1
- bne _08057E96
- ldr r0, _08057EA0 @ =CableClub_EventScript_DoLinkRoomExit
- bl ScriptContext1_SetupScript
- ldr r0, _08057EA4 @ =sub_8057E6C
- bl c1_link_related_func_set
-_08057E96:
- movs r0, 0x11
- pop {r1}
- bx r1
- .align 2, 0
-_08057E9C: .4byte gUnknown_3000E80
-_08057EA0: .4byte CableClub_EventScript_DoLinkRoomExit
-_08057EA4: .4byte sub_8057E6C
- thumb_func_end sub_8057E70
-
- thumb_func_start sub_8057EA8
-sub_8057EA8: @ 8057EA8
- push {lr}
- ldr r0, _08057EB8 @ =sub_8057E70
- bl c1_link_related_func_set
- movs r0, 0x17
- pop {r1}
- bx r1
- .align 2, 0
-_08057EB8: .4byte sub_8057E70
- thumb_func_end sub_8057EA8
-
- thumb_func_start sub_8057EBC
-sub_8057EBC: @ 8057EBC
- movs r0, 0x11
- bx lr
- thumb_func_end sub_8057EBC
-
- thumb_func_start sub_8057EC0
-sub_8057EC0: @ 8057EC0
- push {lr}
- movs r0, 0x83
- bl sub_805798C
- cmp r0, 0x1
- beq _08057EFC
- ldr r0, _08057F00 @ =gUnknown_3000E84
- ldr r2, [r0]
- ldr r1, _08057F04 @ =sub_8057E1C
- adds r3, r0, 0
- cmp r2, r1
- bne _08057EE6
- ldr r1, _08057F08 @ =gUnknown_3000E80
- ldr r0, _08057F0C @ =gLocalLinkPlayerId
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x82
- bne _08057F1E
-_08057EE6:
- ldr r1, [r3]
- ldr r0, _08057F10 @ =sub_8057E10
- cmp r1, r0
- bne _08057F14
- ldr r1, _08057F08 @ =gUnknown_3000E80
- ldr r0, _08057F0C @ =gLocalLinkPlayerId
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x81
- bne _08057F14
-_08057EFC:
- movs r0, 0x2
- b _08057F24
- .align 2, 0
-_08057F00: .4byte gUnknown_3000E84
-_08057F04: .4byte sub_8057E1C
-_08057F08: .4byte gUnknown_3000E80
-_08057F0C: .4byte gLocalLinkPlayerId
-_08057F10: .4byte sub_8057E10
-_08057F14:
- movs r0, 0x82
- bl sub_8057954
- cmp r0, 0
- bne _08057F22
-_08057F1E:
- movs r0, 0
- b _08057F24
-_08057F22:
- movs r0, 0x1
-_08057F24:
- pop {r1}
- bx r1
- thumb_func_end sub_8057EC0
-
- thumb_func_start sub_8057F28
-sub_8057F28: @ 8057F28
- push {lr}
- movs r0, 0x83
- bl sub_805798C
- pop {r1}
- bx r1
- thumb_func_end sub_8057F28
-
- thumb_func_start sub_8057F34
-sub_8057F34: @ 8057F34
- push {lr}
- ldr r0, _08057F44 @ =sub_8057E58
- bl c1_link_related_func_set
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08057F44: .4byte sub_8057E58
- thumb_func_end sub_8057F34
-
- thumb_func_start sub_8057F48
-sub_8057F48: @ 8057F48
- push {lr}
- ldr r0, _08057F58 @ =sub_8057DA4
- bl c1_link_related_func_set
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08057F58: .4byte sub_8057DA4
- thumb_func_end sub_8057F48
-
- thumb_func_start sub_8057F5C
-sub_8057F5C: @ 8057F5C
- push {lr}
- ldr r0, _08057F6C @ =sub_8057EA8
- bl c1_link_related_func_set
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08057F6C: .4byte sub_8057EA8
- thumb_func_end sub_8057F5C
-
- thumb_func_start sub_8057F70
-sub_8057F70: @ 8057F70
- push {lr}
- ldr r0, _08057F80 @ =sub_8057EBC
- bl c1_link_related_func_set
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08057F80: .4byte sub_8057EBC
- thumb_func_end sub_8057F70
-
- thumb_func_start sub_8057F84
-sub_8057F84: @ 8057F84
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r6, r2, 0
- strb r4, [r6]
- movs r0, 0
- cmp r4, r1
- bne _08057F96
- movs r0, 0x1
-_08057F96:
- strb r0, [r6, 0x1]
- ldr r1, _08057FE8 @ =gLinkPlayerObjectEvents
- lsls r0, r4, 2
- adds r0, r1
- ldrb r0, [r0, 0x3]
- strb r0, [r6, 0x2]
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_805854C
- strb r0, [r6, 0x3]
- mov r5, sp
- adds r5, 0x2
- adds r0, r4, 0
- mov r1, sp
- adds r2, r5, 0
- bl sub_8058524
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r6, 0x4]
- ldrh r0, [r5]
- strh r0, [r6, 0x6]
- adds r0, r4, 0
- bl sub_805856C
- strb r0, [r6, 0x8]
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- strh r0, [r6, 0xC]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08057FE8: .4byte gLinkPlayerObjectEvents
- thumb_func_end sub_8057F84
-
- thumb_func_start sub_8057FEC
-sub_8057FEC: @ 8057FEC
- push {lr}
- ldrb r0, [r0, 0x2]
- cmp r0, 0x2
- beq _08057FF8
- cmp r0, 0
- bne _08057FFC
-_08057FF8:
- movs r0, 0x1
- b _08057FFE
-_08057FFC:
- movs r0, 0
-_08057FFE:
- pop {r1}
- bx r1
- thumb_func_end sub_8057FEC
-
- thumb_func_start sub_8058004
-sub_8058004: @ 8058004
- push {lr}
- ldrb r0, [r0, 0x2]
- cmp r0, 0x2
- beq _08058010
- cmp r0, 0
- bne _08058014
-_08058010:
- movs r0, 0x1
- b _08058016
-_08058014:
- movs r0, 0
-_08058016:
- pop {r1}
- bx r1
- thumb_func_end sub_8058004
-
- thumb_func_start sub_805801C
-sub_805801C: @ 805801C
- push {lr}
- adds r1, r0, 0
- ldrb r0, [r1, 0x2]
- cmp r0, 0x2
- bne _0805802E
- adds r0, r1, 0x4
- bl GetCoordEventScriptAtMapPosition
- b _08058030
-_0805802E:
- movs r0, 0
-_08058030:
- pop {r1}
- bx r1
- thumb_func_end sub_805801C
-
- thumb_func_start sub_8058034
-sub_8058034: @ 8058034
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0x2]
- cmp r0, 0x2
- beq _08058042
- cmp r0, 0
- bne _08058058
-_08058042:
- ldrb r0, [r4, 0xC]
- bl MetatileBehavior_IsSouthArrowWarp
- lsls r0, 24
- cmp r0, 0
- beq _08058058
- ldrb r0, [r4, 0x3]
- cmp r0, 0x1
- bne _08058058
- movs r0, 0x1
- b _0805805A
-_08058058:
- movs r0, 0
-_0805805A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8058034
-
- thumb_func_start sub_8058060
-sub_8058060: @ 8058060
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldrb r0, [r4, 0x2]
- cmp r0, 0
- beq _08058074
- cmp r0, 0x2
- beq _08058074
- movs r0, 0
- b _08058122
-_08058074:
- ldr r0, [r4, 0x4]
- ldr r1, [r4, 0x8]
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r3, _080580E4 @ =gDirectionToVectors
- ldrb r0, [r4, 0x3]
- lsls r0, 3
- adds r0, r3
- ldr r0, [r0]
- mov r1, sp
- ldrh r1, [r1]
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _080580E8 @ =0xffff0000
- ldr r2, [sp]
- ands r2, r1
- orrs r2, r0
- str r2, [sp]
- asrs r1, r2, 16
- ldrb r0, [r4, 0x3]
- lsls r0, 3
- adds r3, 0x4
- adds r0, r3
- ldr r0, [r0]
- adds r0, r1
- lsls r0, 16
- ldr r1, _080580EC @ =0x0000ffff
- ands r1, r2
- orrs r1, r0
- str r1, [sp]
- ldr r2, _080580F0 @ =0xffffff00
- ldr r0, [sp, 0x4]
- ands r0, r2
- str r0, [sp, 0x4]
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- asrs r1, 16
- bl GetLinkPlayerIdAt
- lsls r0, 24
- lsrs r1, r0, 24
- adds r2, r1, 0
- cmp r1, 0x4
- beq _08058118
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _080580E0
- ldr r0, _080580F4 @ =gUnknown_3000E80
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0x80
- beq _080580FC
-_080580E0:
- ldr r0, _080580F8 @ =CableClub_EventScript_TooBusyToNotice
- b _08058122
- .align 2, 0
-_080580E4: .4byte gDirectionToVectors
-_080580E8: .4byte 0xffff0000
-_080580EC: .4byte 0x0000ffff
-_080580F0: .4byte 0xffffff00
-_080580F4: .4byte gUnknown_3000E80
-_080580F8: .4byte CableClub_EventScript_TooBusyToNotice
-_080580FC:
- adds r0, r2, 0
- bl GetSeeingLinkPlayerCardMsg
- cmp r0, 0
- bne _08058110
- ldr r0, _0805810C @ =CableClub_EventScript_ReadTrainerCard
- b _08058122
- .align 2, 0
-_0805810C: .4byte CableClub_EventScript_ReadTrainerCard
-_08058110:
- ldr r0, _08058114 @ =CableClub_EventScript_ReadTrainerCardColored
- b _08058122
- .align 2, 0
-_08058114: .4byte CableClub_EventScript_ReadTrainerCardColored
-_08058118:
- ldrb r1, [r4, 0xC]
- ldrb r2, [r4, 0x3]
- mov r0, sp
- bl GetInteractedLinkPlayerScript
-_08058122:
- add sp, 0x8
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8058060
-
- thumb_func_start sub_805812C
-sub_805812C: @ 805812C
- push {lr}
- adds r1, r0, 0
- ldr r0, _08058178 @ =BattleColosseum_4P_EventScript_PlayerSpot0
- cmp r1, r0
- beq _08058172
- ldr r0, _0805817C @ =BattleColosseum_4P_EventScript_PlayerSpot1
- cmp r1, r0
- beq _080581B4
- ldr r0, _08058180 @ =BattleColosseum_4P_EventScript_PlayerSpot2
- cmp r1, r0
- beq _08058172
- ldr r0, _08058184 @ =BattleColosseum_4P_EventScript_PlayerSpot3
- cmp r1, r0
- beq _080581B4
- ldr r0, _08058188 @ =RecordCenter_EventScript_Spot
- cmp r1, r0
- beq _08058172
- ldr r0, _0805818C @ =RecordCenter_EventScript_Spot
- cmp r1, r0
- beq _080581B4
- ldr r0, _08058190 @ =RecordCenter_EventScript_Spot
- cmp r1, r0
- beq _08058172
- ldr r0, _08058194 @ =RecordCenter_EventScript_Spot
- cmp r1, r0
- beq _080581B4
- ldr r0, _08058198 @ =BattleColosseum_2P_EventScript_PlayerSpot0
- cmp r1, r0
- beq _08058172
- ldr r0, _0805819C @ =BattleColosseum_2P_EventScript_PlayerSpot1
- cmp r1, r0
- beq _080581B4
- ldr r0, _080581A0 @ =TradeCenter_EventScript_Chair0
- cmp r1, r0
- bne _080581A4
-_08058172:
- movs r0, 0xA
- b _080581B6
- .align 2, 0
-_08058178: .4byte BattleColosseum_4P_EventScript_PlayerSpot0
-_0805817C: .4byte BattleColosseum_4P_EventScript_PlayerSpot1
-_08058180: .4byte BattleColosseum_4P_EventScript_PlayerSpot2
-_08058184: .4byte BattleColosseum_4P_EventScript_PlayerSpot3
-_08058188: .4byte RecordCenter_EventScript_Spot
-_0805818C: .4byte RecordCenter_EventScript_Spot
-_08058190: .4byte RecordCenter_EventScript_Spot
-_08058194: .4byte RecordCenter_EventScript_Spot
-_08058198: .4byte BattleColosseum_2P_EventScript_PlayerSpot0
-_0805819C: .4byte BattleColosseum_2P_EventScript_PlayerSpot1
-_080581A0: .4byte TradeCenter_EventScript_Chair0
-_080581A4:
- ldr r0, _080581B0 @ =TradeCenter_EventScript_Chair1
- cmp r1, r0
- beq _080581B4
- movs r0, 0
- b _080581B6
- .align 2, 0
-_080581B0: .4byte TradeCenter_EventScript_Chair1
-_080581B4:
- movs r0, 0x9
-_080581B6:
- pop {r1}
- bx r1
- thumb_func_end sub_805812C
-
- thumb_func_start sub_80581BC
-sub_80581BC: @ 80581BC
- push {lr}
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- thumb_func_end sub_80581BC
-
- thumb_func_start sub_80581C8
-sub_80581C8: @ 80581C8
- push {lr}
- movs r0, 0x6
- bl PlaySE
- bl ShowStartMenu
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- thumb_func_end sub_80581C8
-
- thumb_func_start sub_80581DC
-sub_80581DC: @ 80581DC
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl ScriptContext1_SetupScript
- bl ScriptContext2_Enable
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80581DC
-
- thumb_func_start sub_80581F8
-sub_80581F8: @ 80581F8
- push {lr}
- movs r0, 0x6
- bl PlaySE
- ldr r0, _08058210 @ =TradeCenter_ConfirmLeaveRoom
- bl ScriptContext1_SetupScript
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .align 2, 0
-_08058210: .4byte TradeCenter_ConfirmLeaveRoom
- thumb_func_end sub_80581F8
-
- thumb_func_start sub_8058214
-sub_8058214: @ 8058214
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl ScriptContext1_SetupScript
- bl ScriptContext2_Enable
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8058214
-
- thumb_func_start sub_8058230
-sub_8058230: @ 8058230
- push {lr}
- ldr r0, _08058240 @ =TradeCenter_TerminateLink
- bl ScriptContext1_SetupScript
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .align 2, 0
-_08058240: .4byte TradeCenter_TerminateLink
- thumb_func_end sub_8058230
-
- thumb_func_start sub_8058244
-sub_8058244: @ 8058244
- push {lr}
- bl IsUpdateLinkStateCBActive
- cmp r0, 0
- bne _08058252
- movs r0, 0
- b _0805826C
-_08058252:
- bl GetLinkRecvQueueLength
- cmp r0, 0x2
- bls _08058264
- ldr r1, _08058260 @ =gUnknown_3000E88
- movs r0, 0x1
- b _08058268
- .align 2, 0
-_08058260: .4byte gUnknown_3000E88
-_08058264:
- ldr r1, _08058270 @ =gUnknown_3000E88
- movs r0, 0
-_08058268:
- strb r0, [r1]
- ldrb r0, [r1]
-_0805826C:
- pop {r1}
- bx r1
- .align 2, 0
-_08058270: .4byte gUnknown_3000E88
- thumb_func_end sub_8058244
-
- thumb_func_start sub_8058274
-sub_8058274: @ 8058274
- push {lr}
- bl GetLinkRecvQueueLength
- cmp r0, 0x1
- bls _080582D8
- bl IsUpdateLinkStateCBActive
- cmp r0, 0x1
- bne _080582D8
- bl IsSendingKeysToLink
- cmp r0, 0x1
- bne _080582D8
- ldr r0, _080582C4 @ =gUnknown_3000E84
- ldr r1, [r0]
- ldr r0, _080582C8 @ =sub_8057DC8
- cmp r1, r0
- beq _080582C0
- ldr r0, _080582CC @ =sub_8057DA4
- cmp r1, r0
- bne _080582D8
- ldr r0, _080582D0 @ =gUnknown_3000E88
- ldrb r2, [r0]
- movs r1, 0
- strb r1, [r0]
- cmp r2, 0x1
- beq _080582C0
- ldr r2, _080582D4 @ =gPaletteFade
- ldrb r1, [r2, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080582D8
- ldrb r1, [r2, 0xA]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080582D8
-_080582C0:
- movs r0, 0x1
- b _080582DA
- .align 2, 0
-_080582C4: .4byte gUnknown_3000E84
-_080582C8: .4byte sub_8057DC8
-_080582CC: .4byte sub_8057DA4
-_080582D0: .4byte gUnknown_3000E88
-_080582D4: .4byte gPaletteFade
-_080582D8:
- movs r0, 0
-_080582DA:
- pop {r1}
- bx r1
- thumb_func_end sub_8058274
-
- thumb_func_start sub_80582E0
-sub_80582E0: @ 80582E0
- push {lr}
- bl sub_805833C
- cmp r0, 0x1
- bls _08058304
- bl IsUpdateLinkStateCBActive
- cmp r0, 0x1
- bne _08058304
- bl IsSendingKeysToLink
- cmp r0, 0x1
- bne _08058304
- ldr r0, _08058308 @ =gUnknown_3000E84
- ldr r1, [r0]
- ldr r0, _0805830C @ =sub_8057DEC
- cmp r1, r0
- beq _08058310
-_08058304:
- movs r0, 0
- b _08058312
- .align 2, 0
-_08058308: .4byte gUnknown_3000E84
-_0805830C: .4byte sub_8057DEC
-_08058310:
- movs r0, 0x1
-_08058312:
- pop {r1}
- bx r1
- thumb_func_end sub_80582E0
-
- thumb_func_start sub_8058318
-sub_8058318: @ 8058318
- push {lr}
- ldr r0, _08058330 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- bne _08058334
- bl IsSendingKeysToLink
- cmp r0, 0
- beq _08058334
- movs r0, 0x1
- b _08058336
- .align 2, 0
-_08058330: .4byte gWirelessCommType
-_08058334:
- movs r0, 0
-_08058336:
- pop {r1}
- bx r1
- thumb_func_end sub_8058318
-
- thumb_func_start sub_805833C
-sub_805833C: @ 805833C
- push {lr}
- ldr r0, _08058350 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- bne _0805835C
- ldr r0, _08058354 @ =gLink
- ldr r1, _08058358 @ =0x00000339
- adds r0, r1
- ldrb r0, [r0]
- b _08058364
- .align 2, 0
-_08058350: .4byte gWirelessCommType
-_08058354: .4byte gLink
-_08058358: .4byte 0x00000339
-_0805835C:
- ldr r0, _08058368 @ =Rfu
- ldr r1, _0805836C @ =0x000008d2
- adds r0, r1
- ldrb r0, [r0]
-_08058364:
- pop {r1}
- bx r1
- .align 2, 0
-_08058368: .4byte Rfu
-_0805836C: .4byte 0x000008d2
- thumb_func_end sub_805833C
-
- thumb_func_start ZeroLinkPlayerObjectEvent
-ZeroLinkPlayerObjectEvent: @ 8058370
- movs r1, 0
- str r1, [r0]
- bx lr
- thumb_func_end ZeroLinkPlayerObjectEvent
-
- thumb_func_start ClearLinkPlayerObjectEvents
-ClearLinkPlayerObjectEvents: @ 8058378
- push {lr}
- ldr r0, _08058388 @ =gLinkPlayerObjectEvents
- movs r1, 0
- movs r2, 0x10
- bl memset
- pop {r0}
- bx r0
- .align 2, 0
-_08058388: .4byte gLinkPlayerObjectEvents
- thumb_func_end ClearLinkPlayerObjectEvents
-
- thumb_func_start ZeroObjectEvent
-ZeroObjectEvent: @ 805838C
- push {lr}
- movs r1, 0
- movs r2, 0x24
- bl memset
- pop {r0}
- bx r0
- thumb_func_end ZeroObjectEvent
-
- thumb_func_start SpawnLinkPlayerObjectEvent
-SpawnLinkPlayerObjectEvent: @ 805839C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r1
- mov r10, r2
- mov r8, r3
- lsls r0, 24
- lsrs r7, r0, 24
- mov r0, r9
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- mov r1, r10
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- mov r2, r8
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- bl GetFirstInactiveObjectEventId
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r4, r7, 2
- ldr r0, _08058440 @ =gLinkPlayerObjectEvents
- adds r4, r0
- lsls r5, r6, 3
- adds r5, r6
- lsls r5, 2
- ldr r0, _08058444 @ =gObjectEvents
- adds r5, r0
- adds r0, r4, 0
- bl ZeroLinkPlayerObjectEvent
- adds r0, r5, 0
- bl ZeroObjectEvent
- movs r2, 0
- movs r1, 0x1
- movs r0, 0x1
- strb r0, [r4]
- strb r7, [r4, 0x1]
- strb r6, [r4, 0x2]
- strb r2, [r4, 0x3]
- ldrb r0, [r5]
- orrs r0, r1
- mov r2, r8
- ands r2, r1
- lsls r2, 1
- movs r1, 0x3
- negs r1, r1
- ands r0, r1
- orrs r0, r2
- strb r0, [r5]
- movs r0, 0x2
- strb r0, [r5, 0x19]
- movs r0, 0x40
- strb r0, [r5, 0x4]
- mov r0, r9
- lsls r0, 16
- asrs r0, 16
- mov r9, r0
- mov r1, r10
- lsls r1, 16
- asrs r1, 16
- mov r10, r1
- adds r0, r5, 0
- mov r1, r9
- mov r2, r10
- bl InitLinkPlayerObjectEventPos
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08058440: .4byte gLinkPlayerObjectEvents
-_08058444: .4byte gObjectEvents
- thumb_func_end SpawnLinkPlayerObjectEvent
-
- thumb_func_start InitLinkPlayerObjectEventPos
-InitLinkPlayerObjectEventPos: @ 8058448
- push {r4,lr}
- adds r4, r0, 0
- adds r0, r1, 0
- adds r1, r2, 0
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 16
- lsrs r1, 16
- strh r0, [r4, 0x10]
- strh r1, [r4, 0x12]
- strh r0, [r4, 0x14]
- strh r1, [r4, 0x16]
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- adds r2, r4, 0
- adds r2, 0xC
- adds r3, r4, 0
- adds r3, 0xE
- bl SetSpritePosToMapCoords
- ldrh r0, [r4, 0xC]
- adds r0, 0x8
- strh r0, [r4, 0xC]
- adds r0, r4, 0
- bl ObjectEventUpdateZCoord
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end InitLinkPlayerObjectEventPos
-
- thumb_func_start sub_8058488
-sub_8058488: @ 8058488
- push {lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r2, r1, 24
- ldr r1, _080584B0 @ =gLinkPlayerObjectEvents
- lsrs r0, 22
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- beq _080584AA
- ldrb r0, [r1, 0x2]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _080584B4 @ =gObjectEvents
- adds r1, r0
- strb r2, [r1, 0x19]
-_080584AA:
- pop {r0}
- bx r0
- .align 2, 0
-_080584B0: .4byte gLinkPlayerObjectEvents
-_080584B4: .4byte gObjectEvents
- thumb_func_end sub_8058488
-
- thumb_func_start sub_80584B8
-sub_80584B8: @ 80584B8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 22
- ldr r1, _080584F8 @ =gLinkPlayerObjectEvents
- adds r5, r0, r1
- ldrb r1, [r5, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080584FC @ =gObjectEvents
- adds r4, r0, r1
- ldrb r0, [r4, 0x4]
- cmp r0, 0x40
- beq _080584E4
- adds r1, r0, 0
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08058500 @ =gSprites
- adds r0, r1
- bl DestroySprite
-_080584E4:
- movs r0, 0
- strb r0, [r5]
- ldrb r1, [r4]
- subs r0, 0x2
- ands r0, r1
- strb r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080584F8: .4byte gLinkPlayerObjectEvents
-_080584FC: .4byte gObjectEvents
-_08058500: .4byte gSprites
- thumb_func_end sub_80584B8
-
- thumb_func_start sub_8058504
-sub_8058504: @ 8058504
- lsls r0, 24
- ldr r1, _0805851C @ =gLinkPlayerObjectEvents
- lsrs r0, 22
- adds r0, r1
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08058520 @ =gObjectEvents
- adds r0, r1
- ldrb r0, [r0, 0x4]
- bx lr
- .align 2, 0
-_0805851C: .4byte gLinkPlayerObjectEvents
-_08058520: .4byte gObjectEvents
- thumb_func_end sub_8058504
-
- thumb_func_start sub_8058524
-sub_8058524: @ 8058524
- lsls r0, 24
- ldr r3, _08058544 @ =gLinkPlayerObjectEvents
- lsrs r0, 22
- adds r0, r3
- ldrb r3, [r0, 0x2]
- lsls r0, r3, 3
- adds r0, r3
- lsls r0, 2
- ldr r3, _08058548 @ =gObjectEvents
- adds r0, r3
- ldrh r3, [r0, 0x10]
- strh r3, [r1]
- ldrh r0, [r0, 0x12]
- strh r0, [r2]
- bx lr
- .align 2, 0
-_08058544: .4byte gLinkPlayerObjectEvents
-_08058548: .4byte gObjectEvents
- thumb_func_end sub_8058524
-
- thumb_func_start sub_805854C
-sub_805854C: @ 805854C
- lsls r0, 24
- ldr r1, _08058564 @ =gLinkPlayerObjectEvents
- lsrs r0, 22
- adds r0, r1
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08058568 @ =gObjectEvents
- adds r0, r1
- ldrb r0, [r0, 0x19]
- bx lr
- .align 2, 0
-_08058564: .4byte gLinkPlayerObjectEvents
-_08058568: .4byte gObjectEvents
- thumb_func_end sub_805854C
-
- thumb_func_start sub_805856C
-sub_805856C: @ 805856C
- lsls r0, 24
- ldr r1, _08058588 @ =gLinkPlayerObjectEvents
- lsrs r0, 22
- adds r0, r1
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805858C @ =gObjectEvents
- adds r0, r1
- ldrb r0, [r0, 0xB]
- lsls r0, 28
- lsrs r0, 28
- bx lr
- .align 2, 0
-_08058588: .4byte gLinkPlayerObjectEvents
-_0805858C: .4byte gObjectEvents
- thumb_func_end sub_805856C
-
- thumb_func_start sub_8058590
-sub_8058590: @ 8058590
- lsls r0, 24
- ldr r1, _080585B0 @ =gLinkPlayerObjectEvents
- lsrs r0, 22
- adds r0, r1
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080585B4 @ =gObjectEvents
- adds r0, r1
- adds r0, 0x21
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0x10
- subs r0, r1
- bx lr
- .align 2, 0
-_080585B0: .4byte gLinkPlayerObjectEvents
-_080585B4: .4byte gObjectEvents
- thumb_func_end sub_8058590
-
- thumb_func_start GetLinkPlayerIdAt
-GetLinkPlayerIdAt: @ 80585B8
- push {r4-r6,lr}
- movs r2, 0
- ldr r5, _080585FC @ =gLinkPlayerObjectEvents
- lsls r0, 16
- asrs r4, r0, 16
- lsls r1, 16
- asrs r3, r1, 16
-_080585C6:
- lsls r0, r2, 2
- adds r1, r0, r5
- ldrb r0, [r1]
- cmp r0, 0
- beq _08058604
- ldrb r0, [r1, 0x3]
- cmp r0, 0
- beq _080585DA
- cmp r0, 0x2
- bne _08058604
-_080585DA:
- ldrb r1, [r1, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08058600 @ =gObjectEvents
- adds r1, r0, r1
- movs r6, 0x10
- ldrsh r0, [r1, r6]
- cmp r0, r4
- bne _08058604
- movs r6, 0x12
- ldrsh r0, [r1, r6]
- cmp r0, r3
- bne _08058604
- adds r0, r2, 0
- b _08058610
- .align 2, 0
-_080585FC: .4byte gLinkPlayerObjectEvents
-_08058600: .4byte gObjectEvents
-_08058604:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _080585C6
- movs r0, 0x4
-_08058610:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end GetLinkPlayerIdAt
-
- thumb_func_start sub_8058618
-sub_8058618: @ 8058618
- push {r4-r6,lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r3, r1, 24
- adds r2, r3, 0
- lsrs r0, 22
- ldr r1, _08058648 @ =gLinkPlayerObjectEvents
- adds r5, r0, r1
- ldrb r1, [r5, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805864C @ =gObjectEvents
- adds r6, r0, r1
- ldrb r0, [r5]
- cmp r0, 0
- beq _08058674
- cmp r3, 0xA
- bls _08058650
- ldrb r0, [r6]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r6]
- b _08058674
- .align 2, 0
-_08058648: .4byte gLinkPlayerObjectEvents
-_0805864C: .4byte gObjectEvents
-_08058650:
- ldr r4, _0805867C @ =gUnknown_826D374
- ldr r1, _08058680 @ =gUnknown_826D33C
- ldrb r0, [r5, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r3, [r0]
- adds r0, r5, 0
- adds r1, r6, 0
- bl _call_via_r3
- lsls r0, 24
- lsrs r0, 22
- adds r0, r4
- ldr r2, [r0]
- adds r0, r5, 0
- adds r1, r6, 0
- bl _call_via_r2
-_08058674:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0805867C: .4byte gUnknown_826D374
-_08058680: .4byte gUnknown_826D33C
- thumb_func_end sub_8058618
-
- thumb_func_start sub_8058684
-sub_8058684: @ 8058684
- push {r4,lr}
- lsls r2, 24
- lsrs r2, 24
- ldr r4, _080586A0 @ =gUnknown_826D348
- lsls r3, r2, 2
- adds r3, r4
- ldr r3, [r3]
- bl _call_via_r3
- lsls r0, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080586A0: .4byte gUnknown_826D348
- thumb_func_end sub_8058684
-
- thumb_func_start sub_80586A4
-sub_80586A4: @ 80586A4
- movs r0, 0x1
- bx lr
- thumb_func_end sub_80586A4
-
- thumb_func_start sub_80586A8
-sub_80586A8: @ 80586A8
- push {r4,lr}
- lsls r2, 24
- lsrs r2, 24
- ldr r4, _080586C4 @ =gUnknown_826D348
- lsls r3, r2, 2
- adds r3, r4
- ldr r3, [r3]
- bl _call_via_r3
- lsls r0, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080586C4: .4byte gUnknown_826D348
- thumb_func_end sub_80586A8
-
- thumb_func_start sub_80586C8
-sub_80586C8: @ 80586C8
- movs r0, 0
- bx lr
- thumb_func_end sub_80586C8
-
- thumb_func_start sub_80586CC
-sub_80586CC: @ 80586CC
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r0, r2, 24
- lsrs r0, 24
- ldrb r1, [r5, 0x19]
- bl npc_something3
- strb r0, [r5, 0x19]
- ldrb r1, [r5, 0x19]
- mov r6, sp
- adds r6, 0x2
- adds r0, r5, 0
- mov r2, sp
- adds r3, r6, 0
- bl ObjectEventMoveDestCoords
- ldrb r0, [r4, 0x2]
- ldrb r1, [r5, 0x19]
- mov r2, sp
- movs r3, 0
- ldrsh r2, [r2, r3]
- movs r4, 0
- ldrsh r3, [r6, r4]
- bl npc_080587EC
- lsls r0, 24
- cmp r0, 0
- bne _0805872A
- adds r1, r5, 0
- adds r1, 0x21
- movs r0, 0x10
- strb r0, [r1]
- mov r0, sp
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r3, 0
- ldrsh r2, [r6, r3]
- adds r0, r5, 0
- bl ShiftObjectEventCoords
- adds r0, r5, 0
- bl ObjectEventUpdateZCoord
- movs r0, 0x1
- b _0805872C
-_0805872A:
- movs r0, 0
-_0805872C:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80586CC
-
- thumb_func_start sub_8058734
-sub_8058734: @ 8058734
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, r2, 24
- lsrs r0, 24
- ldrb r1, [r4, 0x19]
- bl npc_something3
- strb r0, [r4, 0x19]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8058734
-
- thumb_func_start sub_805874C
-sub_805874C: @ 805874C
- movs r1, 0
- strb r1, [r0, 0x3]
- bx lr
- thumb_func_end sub_805874C
-
- thumb_func_start sub_8058754
-sub_8058754: @ 8058754
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r4, r1, 0
- adds r5, r4, 0
- adds r5, 0x21
- ldrb r0, [r5]
- subs r0, 0x1
- strb r0, [r5]
- movs r0, 0x1
- strb r0, [r6, 0x3]
- ldrb r0, [r4, 0x19]
- adds r1, 0xC
- adds r2, r4, 0
- adds r2, 0xE
- bl MoveCoords
- ldrb r0, [r5]
- cmp r0, 0
- bne _08058784
- adds r0, r4, 0
- bl ShiftStillObjectEventCoords
- movs r0, 0x2
- strb r0, [r6, 0x3]
-_08058784:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8058754
-
- thumb_func_start npc_something3
-npc_something3: @ 805878C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r2, r1, 24
- subs r0, 0x1
- cmp r0, 0x9
- bhi _080587E4
- lsls r0, 2
- ldr r1, _080587A8 @ =_080587AC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080587A8: .4byte _080587AC
- .align 2, 0
-_080587AC:
- .4byte _080587D4
- .4byte _080587D8
- .4byte _080587DC
- .4byte _080587E0
- .4byte _080587E4
- .4byte _080587E4
- .4byte _080587D4
- .4byte _080587D8
- .4byte _080587DC
- .4byte _080587E0
-_080587D4:
- movs r0, 0x2
- b _080587E6
-_080587D8:
- movs r0, 0x1
- b _080587E6
-_080587DC:
- movs r0, 0x3
- b _080587E6
-_080587E0:
- movs r0, 0x4
- b _080587E6
-_080587E4:
- adds r0, r2, 0
-_080587E6:
- pop {r1}
- bx r1
- thumb_func_end npc_something3
-
- thumb_func_start npc_080587EC
-npc_080587EC: @ 80587EC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r2, 16
- lsrs r2, 16
- mov r12, r2
- lsls r3, 16
- movs r4, 0
- ldr r0, _08058850 @ =gObjectEvents
- mov r9, r0
- lsrs r2, r3, 16
- mov r10, r2
- asrs r6, r3, 16
-_08058810:
- mov r7, r12
- lsls r3, r7, 16
- mov r0, r10
- lsls r5, r0, 16
- cmp r4, r8
- beq _08058854
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- mov r2, r9
- adds r1, r0, r2
- movs r7, 0x10
- ldrsh r0, [r1, r7]
- asrs r2, r3, 16
- cmp r0, r2
- bne _08058838
- movs r7, 0x12
- ldrsh r0, [r1, r7]
- cmp r0, r6
- beq _0805884A
-_08058838:
- movs r7, 0x14
- ldrsh r0, [r1, r7]
- cmp r0, r2
- bne _08058854
- movs r0, 0x16
- ldrsh r1, [r1, r0]
- asrs r0, r5, 16
- cmp r1, r0
- bne _08058854
-_0805884A:
- movs r0, 0x1
- b _0805886A
- .align 2, 0
-_08058850: .4byte gObjectEvents
-_08058854:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _08058810
- asrs r0, r3, 16
- asrs r1, r5, 16
- bl MapGridIsImpassableAt
- lsls r0, 24
- lsrs r0, 24
-_0805886A:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end npc_080587EC
-
- thumb_func_start sub_8058878
-sub_8058878: @ 8058878
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r3, r1, 24
- lsls r2, r5, 2
- ldr r0, _080588B4 @ =gLinkPlayerObjectEvents
- adds r2, r0
- ldrb r1, [r2, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080588B8 @ =gObjectEvents
- adds r4, r0, r1
- ldrb r0, [r2]
- cmp r0, 0
- beq _080588FC
- subs r0, r3, 0x4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _080588BC
- ldrb r1, [r4]
- lsls r1, 30
- lsrs r1, 31
- movs r0, 0
- bl GetRivalAvatarGraphicsIdByStateIdAndGender
- b _080588C6
- .align 2, 0
-_080588B4: .4byte gLinkPlayerObjectEvents
-_080588B8: .4byte gObjectEvents
-_080588BC:
- ldrb r0, [r4]
- lsls r0, 30
- lsrs r0, 31
- bl GetHoennLinkPartnerGraphicsIdByGender
-_080588C6:
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08058904 @ =SpriteCB_LinkPlayer
- movs r2, 0
- str r2, [sp]
- movs r3, 0
- bl AddPseudoObjectEvent
- strb r0, [r4, 0x4]
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08058908 @ =gSprites
- adds r0, r1
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r3]
- strh r5, [r0, 0x2E]
- ldrb r1, [r4]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r4]
-_080588FC:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08058904: .4byte SpriteCB_LinkPlayer
-_08058908: .4byte gSprites
- thumb_func_end sub_8058878
-
- thumb_func_start SpriteCB_LinkPlayer
-SpriteCB_LinkPlayer: @ 805890C
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r0, 0x2E
- ldrsh r4, [r5, r0]
- lsls r4, 2
- ldr r0, _08058970 @ =gLinkPlayerObjectEvents
- adds r4, r0
- ldrb r1, [r4, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08058974 @ =gObjectEvents
- adds r6, r0, r1
- ldrh r0, [r6, 0xC]
- strh r0, [r5, 0x20]
- ldrh r0, [r6, 0xE]
- strh r0, [r5, 0x22]
- ldrb r0, [r6, 0xB]
- lsrs r0, 4
- adds r1, r5, 0
- movs r2, 0x1
- bl SetObjectSubpriorityByZCoord
- ldrb r0, [r6, 0xB]
- lsrs r0, 4
- bl ZCoordToPriority
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- ldrb r0, [r4, 0x3]
- cmp r0, 0
- bne _08058978
- ldrb r0, [r6, 0x19]
- bl GetFaceDirectionAnimNum
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl StartSpriteAnim
- b _0805898A
- .align 2, 0
-_08058970: .4byte gLinkPlayerObjectEvents
-_08058974: .4byte gObjectEvents
-_08058978:
- ldrb r0, [r6, 0x19]
- bl GetMoveDirectionAnimNum
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl StartSpriteAnimIfDifferent
-_0805898A:
- adds r0, r5, 0
- movs r1, 0
- bl UpdateObjectEventSpriteVisibility
- ldrb r0, [r6]
- lsls r0, 29
- cmp r0, 0
- bge _080589BC
- ldrh r0, [r5, 0x3C]
- movs r1, 0x4
- ands r1, r0
- lsls r1, 16
- adds r3, r5, 0
- adds r3, 0x3E
- lsrs r1, 18
- lsls r1, 2
- ldrb r2, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- ldrh r0, [r5, 0x3C]
- adds r0, 0x1
- strh r0, [r5, 0x3C]
-_080589BC:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_LinkPlayer
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/berry_fix/payload/include/global.h b/berry_fix/payload/include/global.h
index 63b4e0391..ef161c249 100644
--- a/berry_fix/payload/include/global.h
+++ b/berry_fix/payload/include/global.h
@@ -639,8 +639,8 @@ struct SaveBlock1 /* 0x02025734 */
{
/*0x00*/ struct Coords16 pos;
/*0x04*/ struct WarpData location;
- /*0x0C*/ struct WarpData warp1;
- /*0x14*/ struct WarpData warp2;
+ /*0x0C*/ struct WarpData continueGameWarp;
+ /*0x14*/ struct WarpData dynamicWarp;
/*0x1C*/ struct WarpData lastHealLocation;
/*0x24*/ struct WarpData warp4;
/*0x2C*/ u16 savedMusic;
diff --git a/common_syms/overworld.txt b/common_syms/overworld.txt
new file mode 100644
index 000000000..e2aec44b1
--- /dev/null
+++ b/common_syms/overworld.txt
@@ -0,0 +1,8 @@
+gBGTilemapBuffers1
+gBGTilemapBuffers2
+gBGTilemapBuffers3
+gFieldCallback
+gFieldCallback2
+gHeldKeyCodeToSend
+gLocalLinkPlayerId
+gFieldLinkPlayerCount
diff --git a/data/maps/CinnabarIsland/scripts.inc b/data/maps/CinnabarIsland/scripts.inc
index e0260dac5..40e8288cd 100644
--- a/data/maps/CinnabarIsland/scripts.inc
+++ b/data/maps/CinnabarIsland/scripts.inc
@@ -60,7 +60,7 @@ CinnabarIsland_OnFrame:: @ 8166F6E
CinnabarIsland_EventScript_ExitPokeCenterForOneIsland:: @ 8166F88
lockall
- clearflag FLAG_SPECIAL_FLAG_0x4001
+ clearflag FLAG_DONT_TRANSITION_MUSIC
savebgm MUS_DUMMY
textcolor 0
setvar VAR_MAP_SCENE_CINNABAR_ISLAND_2, 2
diff --git a/data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc b/data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc
index c96169d1d..844c38997 100644
--- a/data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc
+++ b/data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc
@@ -36,7 +36,7 @@ CinnabarIsland_PokemonCenter_1F_EventScript_Bill:: @ 816E90A
closemessage
playbgm MUS_ANNAI, 1
savebgm MUS_ANNAI
- setflag FLAG_SPECIAL_FLAG_0x4001
+ setflag FLAG_DONT_TRANSITION_MUSIC
setflag FLAG_HIDE_CINNABAR_POKECENTER_BILL
delay 20
compare VAR_FACING, DIR_SOUTH
diff --git a/data/maps/PalletTown/scripts.inc b/data/maps/PalletTown/scripts.inc
index b165ae6b9..1b98d4cb4 100644
--- a/data/maps/PalletTown/scripts.inc
+++ b/data/maps/PalletTown/scripts.inc
@@ -224,7 +224,7 @@ PalletTown_EventScript_OakTrigger:: @ 8165605
clearflag FLAG_HIDE_OAK_IN_HIS_LAB
setvar VAR_MAP_SCENE_PALLET_TOWN_OAK, 1
setflag FLAG_HIDE_OAK_IN_PALLET_TOWN
- setflag FLAG_SPECIAL_FLAG_0x4001
+ setflag FLAG_DONT_TRANSITION_MUSIC
warp MAP_PALLET_TOWN_PROFESSOR_OAKS_LAB, 255, 6, 12
waitstate
releaseall
diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
index 461318e35..facebea6b 100644
--- a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
+++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
@@ -238,7 +238,7 @@ PalletTown_ProfessorOaksLab_ChooseStarterScene:: @ 816923E
waitmovement 0
applymovement LOCALID_RIVAL, Movement_WalkInPlaceFastestUp
waitmovement 0
- clearflag FLAG_SPECIAL_FLAG_0x4001
+ clearflag FLAG_DONT_TRANSITION_MUSIC
savebgm SE_STOP
fadedefaultbgm
msgbox PalletTown_ProfessorOaksLab_Text_RivalFedUpWithWaiting
diff --git a/data/maps/RecordCenter/map.json b/data/maps/RecordCenter/map.json
index 19b310814..ad4308513 100644
--- a/data/maps/RecordCenter/map.json
+++ b/data/maps/RecordCenter/map.json
@@ -67,7 +67,7 @@
"elevation": 3,
"var": "VAR_TEMP_0",
"var_value": "0",
- "script": "RecordCenter_EventScript_Spot"
+ "script": "RecordCenter_EventScript_Spot0"
},
{
"type": "trigger",
@@ -76,7 +76,7 @@
"elevation": 3,
"var": "VAR_TEMP_0",
"var_value": "0",
- "script": "RecordCenter_EventScript_Spot"
+ "script": "RecordCenter_EventScript_Spot1"
},
{
"type": "trigger",
@@ -85,7 +85,7 @@
"elevation": 3,
"var": "VAR_TEMP_0",
"var_value": "0",
- "script": "RecordCenter_EventScript_Spot"
+ "script": "RecordCenter_EventScript_Spot2"
},
{
"type": "trigger",
@@ -94,7 +94,7 @@
"elevation": 3,
"var": "VAR_TEMP_0",
"var_value": "0",
- "script": "RecordCenter_EventScript_Spot"
+ "script": "RecordCenter_EventScript_Spot3"
}
],
"bg_events": []
diff --git a/data/overworld.s b/data/overworld.s
deleted file mode 100644
index 245ee3696..000000000
--- a/data/overworld.s
+++ /dev/null
@@ -1,126 +0,0 @@
-#include "constants/flags.h"
-#include "constants/maps.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2, 0
-
-sWhiteOutMoneyLossMultipliers:: @ 826D294
- .byte 2
- .byte 4
- .byte 6
- .byte 9
- .byte 12
- .byte 16
- .byte 20
- .byte 25
- .byte 30
-
- .align 1
-sWhiteOutMoneyLossBadgeFlagIDs:: @ 826D29E
- .2byte FLAG_BADGE01_GET
- .2byte FLAG_BADGE02_GET
- .2byte FLAG_BADGE03_GET
- .2byte FLAG_BADGE04_GET
- .2byte FLAG_BADGE05_GET
- .2byte FLAG_BADGE06_GET
- .2byte FLAG_BADGE07_GET
- .2byte FLAG_BADGE08_GET
-
- .align 2
-sDummyWarpData:: @ 826D2B0
- map MAP_UNDEFINED
- .byte 0xFF
- .align 1
- .2byte 0xFFFF, 0xFFFF
-
-sUnusedData:: @ 826D2B8
- .4byte 1200
- .4byte 3600
- .4byte 1200
- .4byte 2400
- .4byte 50
- .4byte 80
- .4byte -44
- .4byte 44
-
-gDirectionToVectors:: @ 826D2D8
- .4byte 0, 0
- .4byte 0, 1
- .4byte 0, -1
- .4byte -1, 0
- .4byte 1, 0
- .4byte -1, 1
- .4byte 1, 1
- .4byte -1, -1
- .4byte 1, -1
-
-gUnknown_826D320:: @ 826D320
- .4byte 0x000001f8
- @ {
- @ .bg = 0,
- @ .charBaseIndex = 2,
- @ .mapBaseIndex = 31,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 0,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x000011d1
- @ {
- @ .bg = 1,
- @ .charBaseIndex = 0,
- @ .mapBaseIndex = 29,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 1,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x000021c2
- @ {
- @ .bg = 2,
- @ .charBaseIndex = 0,
- @ .mapBaseIndex = 28,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 2,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x000031e3
- @ {
- @ .bg = 3,
- @ .charBaseIndex = 0,
- @ .mapBaseIndex = 30,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 3,
- @ .baseTile = 0x0000
- @ }
-
-gFlashEffectParams:: @ 826D330
- .4byte REG_WIN0H
- .4byte (2 >> 1) | ((DMA_16BIT | DMA_DEST_RELOAD | DMA_SRC_INC | DMA_REPEAT | DMA_START_HBLANK | DMA_ENABLE) << 16)
- .byte 1, 0
-
- .align 2
-gUnknown_826D33C:: @ 826D33C
- .4byte sub_8058684
- .4byte sub_80586A4
- .4byte sub_80586A8
-
-gUnknown_826D348:: @ 826D348
- .4byte sub_80586C8
- .4byte sub_80586CC
- .4byte sub_80586CC
- .4byte sub_80586CC
- .4byte sub_80586CC
- .4byte sub_80586C8
- .4byte sub_80586C8
- .4byte sub_8058734
- .4byte sub_8058734
- .4byte sub_8058734
- .4byte sub_8058734
-
-gUnknown_826D374:: @ 826D374
- .4byte sub_805874C
- .4byte sub_8058754
diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc
index 01b0d9b34..1053c1028 100644
--- a/data/scripts/cable_club.inc
+++ b/data/scripts/cable_club.inc
@@ -702,7 +702,11 @@ TradeCenter_EventScript_Chair3:: @ 81BB974
end
@ Nop in FRLG
-RecordCenter_EventScript_Spot:: @ 81BB980
+@ Separate labels to match GetDirectionForEventScript
+RecordCenter_EventScript_Spot0:: @ 81BB980
+RecordCenter_EventScript_Spot1:: @ 81BB980
+RecordCenter_EventScript_Spot2:: @ 81BB980
+RecordCenter_EventScript_Spot3:: @ 81BB980
end
CableClub_EventScript_ReadTrainerCard:: @ 81BB981
diff --git a/include/bg_regs.h b/include/bg_regs.h
index 660b47d1e..e16cf3119 100644
--- a/include/bg_regs.h
+++ b/include/bg_regs.h
@@ -2,5 +2,6 @@
#define GUARD_BG_REGS_H
extern const u8 gBGControlRegOffsets[];
+extern const u16 gOverworldBackgroundLayerFlags[];
#endif //GUARD_BG_REGS_H
diff --git a/include/cable_club.h b/include/cable_club.h
index 57515efc7..ccdc6b98d 100644
--- a/include/cable_club.h
+++ b/include/cable_club.h
@@ -11,5 +11,6 @@
void sub_8081A90(u8 taskId);
u8 CreateTask_ReestablishLinkInCableClubRoom(void);
void CB2_ReturnFromCableClubBattle(void);
+bool32 GetSeeingLinkPlayerCardMsg(u8 who);
#endif //GUARD_CABLE_CLUB_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 6fd532a0e..212718bc9 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -1319,6 +1319,7 @@
#define FLAG_SYS_SAFARI_MODE (SYS_FLAGS + 0x0)
#define FLAG_SYS_VS_SEEKER_CHARGING (SYS_FLAGS + 0x1)
+#define FLAG_SYS_CRUISE_MODE (SYS_FLAGS + 0x2)
#define FLAG_SYS_WHITE_FLUTE_ACTIVE (SYS_FLAGS + 0x3)
#define FLAG_SYS_BLACK_FLUTE_ACTIVE (SYS_FLAGS + 0x4)
#define FLAG_SYS_USE_STRENGTH (SYS_FLAGS + 0x5)
@@ -1437,7 +1438,7 @@
#define SPECIAL_FLAGS_START 0x4000
#define SPECIAL_FLAGS_COUNT 16
#define FLAG_SPECIAL_FLAG_0x4000 0x4000
-#define FLAG_SPECIAL_FLAG_0x4001 0x4001
+#define FLAG_DONT_TRANSITION_MUSIC 0x4001
#define FLAG_SPECIAL_FLAG_0x4002 0x4002
#define FLAG_SPECIAL_FLAG_0x4003 0x4003
#define FLAG_SPECIAL_FLAG_0x4004 0x4004
diff --git a/include/credits.h b/include/credits.h
index 763abd77f..8207b703c 100644
--- a/include/credits.h
+++ b/include/credits.h
@@ -3,4 +3,20 @@
extern bool8 gHasHallOfFameRecords;
+#define CREDITSOVWLDCMD_FB 0xFB
+#define CREDITSOVWLDCMD_FC 0xFC
+#define CREDITSOVWLDCMD_END 0xFD
+#define CREDITSOVWLDCMD_LOADMAP 0xFE
+#define CREDITSOVWLDCMD_FF 0xFF
+
+#define CREDITSOVWLDLOADMAP(_map, _x, _y, _delay) \
+ { CREDITSOVWLDCMD_LOADMAP, MAP_GROUP(_map), MAP_NUM(_map) }, \
+ { _x, _y, _delay }
+
+#define CREDITSOVWLDSCROLL(_xspeed, _yspeed, _length) \
+ { _xspeed, _yspeed, _length }
+
+#define CREDITSOVWLDEND \
+ { CREDITSOVWLDCMD_END, CREDITSOVWLDCMD_END, CREDITSOVWLDCMD_END }
+
#endif //GUARD_CREDITS_H
diff --git a/include/event_data.h b/include/event_data.h
index e635cbc6d..269762b23 100644
--- a/include/event_data.h
+++ b/include/event_data.h
@@ -58,5 +58,6 @@ void ResetMysteryEventFlags(void);
void ResetMysteryEventVars(void);
bool32 IsNationalPokedexEnabled(void);
void sub_806E190(void);
+void ClearTempFieldEventData(void);
#endif // GUARD_EVENT_DATA_H
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index 792118c00..0c383b2bb 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -71,7 +71,7 @@ void LoadPlayerObjectReflectionPalette(u16, u8);
void LoadSpecialObjectReflectionPalette(u16, u8);
void TryMoveObjectEventToMapCoords(u8, u8, u8, s16, s16);
void PatchObjectPalette(u16, u8);
-void sub_808E16C(s16, s16);
+void sub_805EDF0(s16, s16);
void sub_808F28C(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat);
void sub_8063AD4(s16, s16, s16 *, s16 *);
u8 GetFaceDirectionAnimNum(u8);
@@ -221,5 +221,7 @@ u8 GetAcroPopWheelieMoveDirectionMovementAction(u32 direction);
u8 GetAcroWheelieMoveDirectionMovementAction(u32 direction);
u8 sub_80641EC(u32 direction);
u8 GetFishingBiteDirectionAnimNum(u8 direction);
+void TrySpawnObjectEvents(s16 cameraX, s16 cameraY);
+void ResetObjectEvents(void);
#endif // GUARD_EVENT_OBJECT_MOVEMENT_H
diff --git a/include/event_scripts.h b/include/event_scripts.h
index 9b78854fa..a1bb5e35d 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -1259,4 +1259,26 @@ extern const u8 EventScript_FieldPoison[];
extern const u8 EventScript_EggHatch[];
extern const u8 EventScript_1C1361[];
+// overworld
+
+extern const u8 EventScript_ResetEliteFourEnd[];
+extern const u8 CableClub_EventScript_DoLinkRoomExit[];
+extern const u8 CableClub_EventScript_TooBusyToNotice[];
+extern const u8 CableClub_EventScript_ReadTrainerCard[];
+extern const u8 CableClub_EventScript_ReadTrainerCardColored[];
+extern const u8 BattleColosseum_4P_EventScript_PlayerSpot0[];
+extern const u8 BattleColosseum_4P_EventScript_PlayerSpot1[];
+extern const u8 BattleColosseum_4P_EventScript_PlayerSpot2[];
+extern const u8 BattleColosseum_4P_EventScript_PlayerSpot3[];
+extern const u8 RecordCenter_EventScript_Spot0[];
+extern const u8 RecordCenter_EventScript_Spot1[];
+extern const u8 RecordCenter_EventScript_Spot2[];
+extern const u8 RecordCenter_EventScript_Spot3[];
+extern const u8 BattleColosseum_2P_EventScript_PlayerSpot0[];
+extern const u8 BattleColosseum_2P_EventScript_PlayerSpot1[];
+extern const u8 TradeCenter_EventScript_Chair0[];
+extern const u8 TradeCenter_EventScript_Chair1[];
+extern const u8 TradeCenter_ConfirmLeaveRoom[];
+extern const u8 TradeCenter_TerminateLink[];
+
#endif //GUARD_EVENT_SCRIPTS_H
diff --git a/include/field_camera.h b/include/field_camera.h
index 43b93f291..a3275eb9d 100644
--- a/include/field_camera.h
+++ b/include/field_camera.h
@@ -32,5 +32,11 @@ void SetCameraPanning(s16 x, s16 y);
void UpdateCameraPanning(void);
void InstallCameraPanAheadCallback(void);
void DrawDoorMetatileAt(int x, int y, const u16 *data);
+void move_tilemap_camera_to_upper_left_corner(void);
+void CameraUpdate(void);
+void FieldUpdateBgTilemapScroll(void);
+void ResetCameraUpdateInfo(void);
+u32 InitCameraUpdateCallback(u8 trackedSpriteId);
+void sub_805ACF0(void);
#endif //GUARD_FIELD_CAMERA_H
diff --git a/include/field_effect.h b/include/field_effect.h
index 40c58f44e..f9760d87f 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -27,5 +27,6 @@ void ReturnToFieldFromFlyMapSelect(void);
void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b);
void SpriteCB_PopOutOfAsh(struct Sprite * sprite);
void SpriteCB_LavaridgeGymWarp(struct Sprite * sprite);
+void FieldEffectActiveListClear(void);
#endif //GUARD_FIELD_EFFECTS_H
diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h
index 240353f5e..b57ef14b0 100644
--- a/include/field_fadetransition.h
+++ b/include/field_fadetransition.h
@@ -3,7 +3,7 @@
#include "global.h"
-void sub_807DF7C(void);
+void FieldCB_RushInjuredPokemonToCenter(void);
void DoWarp(void);
void DoDiveWarp(void);
void DoDoorWarp(void);
@@ -11,9 +11,9 @@ void DoDoorWarp(void);
void DoFallWarp(void);
void DoTeleportWarp(void);
void sub_807E500(void);
-void FieldCB_UnionRoomWarp(void);
+void FieldCB_DefaultWarpExit(void);
void WarpFadeOutScreen(void);
-void FieldCallback_ReturnToEventScript2(void);
+void FieldCB_ContinueScriptHandleMusic(void);
void FadeInFromBlack(void);
void FadeTransition_FadeInOnReturnToStartMenu(void);
void WarpFadeInScreen(void);
@@ -28,5 +28,11 @@ void DoLavaridgeGymB1FWarp(void);
void DoLavaridgeGym1FWarp(void);
void DoTeleportWarp(void);
void DoUnionRoomWarp(void);
+void FieldCB_ReturnToFieldWirelessLink(void);
+void FieldCB_ReturnToFieldCableLink(void);
+bool8 FieldCB_ReturnToFieldOpenStartMenu(void);
+void FieldCB_ContinueScript(void);
+void FieldCB_ContinueScriptHandleMusic(void);
+void FieldCB_WarpExitFadeFromBlack(void);
#endif // GUARD_FIELD_FADETRANSITION_H
diff --git a/include/field_message_box.h b/include/field_message_box.h
index a6ef14aae..b822fb8f7 100644
--- a/include/field_message_box.h
+++ b/include/field_message_box.h
@@ -9,5 +9,6 @@ bool8 ShowFieldAutoScrollMessage(const u8 *message);
void HideFieldMessageBox(void);
bool8 IsFieldMessageBoxHidden(void);
bool8 textbox_any_visible(void);
+void sub_8069348(void);
#endif // GUARD_FIELD_MESSAGE_BOX_H
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index edd1f4a77..79e6c2aef 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -60,6 +60,8 @@ void sub_805C260(void);
void player_step(u8 direction, u16 newKeys, u16 heldKeys);
bool32 PlayerIsMovingOnRockStairs(u8 direction);
void sub_805BEB8(void);
+void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender);
void nullsub_24(u8 direction);
+u8 GetRSAvatarGraphicsIdByGender(u8 gender);
#endif //GUARD_FIELD_PLAYER_AVATAR_H
diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h
index aee7dc5a7..06c56d38a 100644
--- a/include/field_screen_effect.h
+++ b/include/field_screen_effect.h
@@ -9,6 +9,9 @@ void sub_80B0244(void);
void sub_807E3EC(void);
void DoOutwardBarnDoorWipe(void);
void Task_BarnDoorWipe(u8 taskId);
-void sub_807F5F0(void);
+void FieldCB_RushInjuredPokemonToCenter(void);
+void WriteFlashScanlineEffectBuffer(u8 flashLevel);
+
+extern const s32 gMaxFlashLevel;
#endif // GUARD_FIELD_SCREEN_EFFECT_H
diff --git a/include/field_specials.h b/include/field_specials.h
index 9c44c35bc..5beeba928 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -31,5 +31,10 @@ void CutMoveOpenDottedHoleDoor(void);
void RunMassageCooldownStepCounter(void);
void IncrementResortGorgeousStepCounter(void);
void IncrementBirthIslandRockStepCount(void);
+void ResetCyclingRoadChallengeData(void);
+void ResetFieldTasksArgs(void);
+bool8 UsedPokemonCenterWarp(void);
+void sub_80CC534(void);
+void sub_80CC59C(void);
#endif // GUARD_FIELD_SPECIALS_H
diff --git a/include/field_tasks.h b/include/field_tasks.h
index aba2a9eee..b037e382d 100644
--- a/include/field_tasks.h
+++ b/include/field_tasks.h
@@ -4,5 +4,6 @@
#include "global.h"
void ActivatePerStepCallback(u8);
+void SetUpFieldTasks(void);
#endif // GUARD_FIELD_TASKS_H
diff --git a/include/field_weather.h b/include/field_weather.h
index 432c8c100..195b35318 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -143,6 +143,10 @@ void sub_807AC98(void);
void SetRainStrengthFromSoundEffect(u16 soundEffect);
void sub_807A790(s8 gammaIndex);
void sub_807A7C4(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay);
+void ApplyWeatherGammaShiftToPal(u8 paletteIndex);
+void StartWeather(void);
+void ResumePausedWeather(void);
+void FadeSelectedPals(u8 mode, s8 delay, u32 selectedPalettes);
extern const u16 gCloudsWeatherPalette[];
extern const u16 gSandstormWeatherPalette[];
diff --git a/include/fieldmap.h b/include/fieldmap.h
index cc4a0f7ed..40aa1c916 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -24,7 +24,7 @@ void GetCameraCoords(u16*, u16*);
bool8 MapGridIsImpassableAt(s32, s32);
s32 GetMapBorderIdAt(s32, s32);
bool32 CanCameraMoveInDirection(s32);
-u32 GetBehaviorByMetatileIdAndMapLayout(struct MapLayout *mapLayout, u16 metatile, u8 attr);
+u32 GetBehaviorByMetatileIdAndMapLayout(const struct MapLayout *mapLayout, u16 metatile, u8 attr);
const struct MapHeader * mapconnection_get_mapheader(struct MapConnection * connection);
struct MapConnection * GetMapConnectionAtPos(s16 x, s16 y);
void sub_8059948(u8 a0, u8 a1);
@@ -34,5 +34,15 @@ u32 GetMetatileAttributeFromRawMetatileBehavior(u32 original, u8 bit);
u32 MapGridGetMetatileAttributeAt(s16 x, s16 y, u8 attr);
void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2);
bool8 CameraMove(s32 x, s32 y);
+void copy_map_tileset1_tileset2_to_vram(struct MapLayout const * mapLayout);
+void apply_map_tileset1_tileset2_palette(struct MapLayout const * mapLayout);
+void InitMap(void);
+void copy_map_tileset2_to_vram_2(const struct MapLayout * mapLayout);
+void apply_map_tileset2_palette(const struct MapLayout * mapLayout);
+void InitMapFromSavedGame(void);
+void copy_map_tileset1_to_vram(const struct MapLayout *mapLayout);
+void copy_map_tileset2_to_vram(const struct MapLayout *mapLayout);
+void GetCameraFocusCoords(u16 *x, u16 *y);
+void SetCameraFocusCoords(u16 x, u16 y);
#endif //GUARD_FIELDMAP_H
diff --git a/include/fldeff.h b/include/fldeff.h
index 9dd6121b2..de0fd2f03 100644
--- a/include/fldeff.h
+++ b/include/fldeff.h
@@ -16,6 +16,7 @@ u8 CreateFieldEffectShowMon(void);
u8 MapTransitionIsExit(u8 lightLevel, u8 mapType);
u8 MapTransitionIsEnter(u8 mapType1, u8 mapType2);
bool8 SetUpFieldMove_Flash(void);
+void CB2_DoChangeMap(void);
// cut
bool8 SetUpFieldMove_Cut(void);
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 1858d3344..cd553a55a 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -185,22 +185,30 @@ struct MapConnections
struct MapHeader
{
- /* 0x00 */ struct MapLayout *mapLayout;
- /* 0x04 */ struct MapEvents *events;
- /* 0x08 */ u8 *mapScripts;
- /* 0x0C */ struct MapConnections *connections;
+ /* 0x00 */ const struct MapLayout *mapLayout;
+ /* 0x04 */ const struct MapEvents *events;
+ /* 0x08 */ const u8 *mapScripts;
+ /* 0x0C */ const struct MapConnections *connections;
/* 0x10 */ u16 music;
/* 0x12 */ u16 mapLayoutId;
/* 0x14 */ u8 regionMapSectionId;
/* 0x15 */ u8 cave;
/* 0x16 */ u8 weather;
/* 0x17 */ u8 mapType;
- /* 0x18 */ u8 filler_18;
- /* 0x19 */ u8 escapeRope;
- /* 0x1A */ s8 flags;
+ /* 0x18 */ bool8 bikingAllowed;
+ /* 0x19 */ u8 flags;
+ /* 0x1A */ s8 floorNum;
/* 0x1B */ u8 battleType;
};
+// Flags for gMapHeader.flags, as defined in the map_header_flags macro
+#define MAP_ALLOW_ESCAPE_ROPE (1 << 0)
+#define MAP_ALLOW_RUN (1 << 1)
+#define MAP_SHOW_MAP_NAME (1 << 2)
+#define UNUSED_MAP_FLAGS (1 << 3 | 1 << 4 | 1 << 5 | 1 << 6 | 1 << 7)
+
+#define SHOW_MAP_NAME_ENABLED ((gMapHeader.flags & (MAP_SHOW_MAP_NAME | UNUSED_MAP_FLAGS)) == MAP_SHOW_MAP_NAME)
+
struct ObjectEvent
{
/*0x00*/ /* 0*/ u32 active:1;
diff --git a/include/global.h b/include/global.h
index b2fd67b4b..aa60be994 100644
--- a/include/global.h
+++ b/include/global.h
@@ -743,8 +743,8 @@ struct SaveBlock1
{
/*0x0000*/ struct Coords16 pos;
/*0x0004*/ struct WarpData location;
- /*0x000C*/ struct WarpData warp1;
- /*0x0014*/ struct WarpData warp2;
+ /*0x000C*/ struct WarpData continueGameWarp;
+ /*0x0014*/ struct WarpData dynamicWarp;
/*0x001C*/ struct WarpData lastHealLocation;
/*0x0024*/ struct WarpData escapeWarp;
/*0x002C*/ u16 savedMusic;
diff --git a/include/heal_location.h b/include/heal_location.h
index 9680f8fdd..2480d1723 100644
--- a/include/heal_location.h
+++ b/include/heal_location.h
@@ -11,7 +11,7 @@ struct HealLocation
s16 y;
};
-const struct HealLocation *GetHealLocationPointer(u32 loc);
+const struct HealLocation *GetHealLocation(u32 loc);
void SetWhiteoutRespawnWarpAndHealerNpc(struct WarpData * warp);
#endif // GUARD_HEAL_LOCATION_H
diff --git a/include/link.h b/include/link.h
index e5a40d6a5..d6f35f66d 100644
--- a/include/link.h
+++ b/include/link.h
@@ -289,5 +289,7 @@ void sub_800A900(u8 a0);
u8 sub_800A8A4(void);
void sub_800A9A4(void);
void SetLocalLinkPlayerId(u8 playerId);
+bool32 IsSendingKeysToLink(void);
+u32 GetLinkRecvQueueLength(void);
#endif // GUARD_LINK_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
index ba2eb0120..31075be77 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -88,7 +88,7 @@ struct UnkRfuStruct_2_Sub_124
/* 0x57b */ vu8 full;
};
-struct UnkRfuStruct_2_Sub_9e8
+struct RfuSendQueue
{
/* 0x000 */ u8 slots[40][14];
/* 0x230 */ vu8 recv_slot;
@@ -148,7 +148,7 @@ typedef struct UnkRfuStruct_2
/* 0x102 */ u8 unk_102;
/* 0x104 */ struct RfuTgtData unk_104;
/* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124;
- /* 0x6a0 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8;
+ /* 0x6a0 */ struct RfuSendQueue sendQueue;
/* 0x8d4 */ struct UnkRfuStruct_2_Sub_c1c unk_c1c;
/* 0x8f4 */ vu8 unk_c3c;
/* 0x8f5 */ u8 reconnectedParentIdx;
@@ -227,16 +227,16 @@ void InitRFU(void);
bool32 RfuIsErrorStatus1or2(void);
void RFU_queue_20_70_reset(struct UnkRfuStruct_2_Sub_124 *ptr);
-void RFU_queue_40_14_reset(struct UnkRfuStruct_2_Sub_9e8 *ptr);
+void RFU_queue_40_14_reset(struct RfuSendQueue *ptr);
void RfuSetErrorStatus(u8 a0, u16 msg);
u8 RfuGetErrorStatus(void);
void RFU_queue_20_70_recv(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
-bool8 RFU_queue_40_14_send(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
+bool8 RFU_queue_40_14_send(struct RfuSendQueue *q1, u8 *q2);
bool8 RFU_queue_2_14_send(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
void RFU_queue_2_14_recv(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
bool8 RFU_queue_20_70_send(struct UnkRfuStruct_2_Sub_124 * a0, u8 *a1);
-void RFU_queue_40_14_recv(struct UnkRfuStruct_2_Sub_9e8 * a0, u8 *a1);
+void RFU_queue_40_14_recv(struct RfuSendQueue * a0, u8 *a1);
void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders);
void UpdateGameData_GroupLockedIn(bool8 started);
bool32 RfuSerialNumberIsValid(u32 a0);
diff --git a/include/load_save.h b/include/load_save.h
index 20df691e5..23c1429ed 100644
--- a/include/load_save.h
+++ b/include/load_save.h
@@ -30,6 +30,8 @@ void ApplyNewEncryptionKeyToWord(u32 * word, u32 encryptionKey);
void ApplyNewEncryptionKeyToHword(u16 * hword, u32 encryptionKey);
void ClearContinueGameWarpStatus2(void);
void SetContinueGameWarpStatusToDynamicWarp(void);
-void sub_804C1AC(void);
+void SetContinueGameWarpStatus(void);
+bool32 UseContinueGameWarp(void);
+void ClearContinueGameWarpStatus();
#endif // GUARD_LOAD_SAVE_H
diff --git a/include/m4a.h b/include/m4a.h
index ee23d917a..b67dd0492 100644
--- a/include/m4a.h
+++ b/include/m4a.h
@@ -25,4 +25,6 @@ void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed);
void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed);
void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo);
+extern const struct SongHeader mus_win_gym;
+
#endif //GUARD_M4A_H
diff --git a/include/map_name_popup.h b/include/map_name_popup.h
index a7c1234c6..3058489f7 100644
--- a/include/map_name_popup.h
+++ b/include/map_name_popup.h
@@ -3,7 +3,7 @@
#include "global.h"
-void CreateMapNamePopupIfNotAlreadyRunning(bool32 palIntoFadedBuffer);
+void ShowMapNamePopup(bool32 palIntoFadedBuffer);
void DismissMapNamePopup(void);
#endif //GUARD_MAP_NAME_POPUP_H
diff --git a/include/map_preview_screen.h b/include/map_preview_screen.h
index a287c6f89..228d37d54 100644
--- a/include/map_preview_screen.h
+++ b/include/map_preview_screen.h
@@ -59,5 +59,6 @@ void MapPreview_InitBgs(void);
void MapPreview_LoadGfx(u8 mapsec);
bool32 MapPreview_IsGfxLoadFinished(void);
void MapPreview_Unload(s32 windowId);
+void MapPreview_StartForestTransition(u8 mapsec);
#endif //GUARD_MAP_PREVIEW_SCREEN_H
diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h
index ac16bf18a..793eeb8a1 100644
--- a/include/metatile_behavior.h
+++ b/include/metatile_behavior.h
@@ -24,7 +24,7 @@ bool8 MetatileBehavior_IsUnknownWarp6F(u8 metatileBehavior);
bool8 MetatileBehavior_IsUnknownWarp6C_to_6F(u8 metatileBehavior);
bool8 MetatileBehavior_IsLadder(u8 metatileBehavior);
bool8 MetatileBehavior_IsNonAnimDoor(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_2(u8 metatileBehavior);
+bool8 MetatileBehavior_IsDeepSouthWarp(u8 metatileBehavior);
bool8 MetatileBehavior_IsSurfable(u8 metatileBehavior);
bool8 MetatileBehavior_IsSemiDeepWater(u8 metatileBehavior);
bool8 MetatileBehavior_IsEastArrowWarp(u8 metatileBehavior);
diff --git a/include/overworld.h b/include/overworld.h
index 730df3667..5f3728dec 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -38,14 +38,14 @@ struct LinkPlayerObjectEvent
u8 active;
u8 linkPlayerId;
u8 objEventId;
- u8 mode;
+ u8 movementMode;
};
struct CreditsOverworldCmd
{
s16 unk_0;
- u16 unk_2;
- u16 unk_4;
+ s16 unk_2;
+ s16 unk_4;
};
/* gDisableMapMusicChangeOnMapLoad */
@@ -53,13 +53,12 @@ struct CreditsOverworldCmd
#define MUSIC_DISABLE_STOP 1
#define MUSIC_DISABLE_KEEP 2
-extern struct UCoords32 gDirectionToVectors[];
+extern const struct UCoords32 gDirectionToVectors[];
extern struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4];
extern MainCallback gFieldCallback;
-extern struct WarpData gUnknown_2031DB4;
-extern struct WarpData gUnknown_2031DBC;
+extern struct WarpData gLastUsedWarp;
extern u8 gUnknown_2031DE0;
extern u8 gFieldLinkPlayerCount;
@@ -68,7 +67,7 @@ extern u8 gLocalLinkPlayerId;
void IncrementGameStat(u8 index);
void Overworld_SetMapObjTemplateCoords(u8, s16, s16);
-void Overworld_SetMapObjTemplateMovementType(u8, u8);
+void Overworld_SetObjEventTemplateMovementType(u8, u8);
void SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
@@ -78,12 +77,8 @@ void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
void SetEscapeWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
void Overworld_SetHealLocationWarp(u8);
-void sub_8084DD4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
-void sub_8084E2C(s8, s8, s8, s8, s8);
-void sub_8084E80(s8, s8, s8, s8, s8);
-void sub_8084EBC(s16, s16);
-void sub_80555E0(void);
-void copy_saved_warp3_bank_and_enter_x_to_warp1(void);
+void SetWarpDestinationToEscapeWarp(void);
+void SetWarpDestinationToLastHealLocation(void);
u8 IsMapTypeOutdoors(u8 mapType);
void Overworld_ClearSavedMusic(void);
bool32 sub_8056124(u16 song);
@@ -100,23 +95,19 @@ void Overworld_ChangeMusicTo(u16);
bool32 IsUpdateLinkStateCBActive(void);
void ClearLinkPlayerObjectEvents(void);
-const struct MapHeader *Overworld_GetMapHeaderByGroupAndId(u16, u16);
+const struct MapHeader *const Overworld_GetMapHeaderByGroupAndId(u16, u16);
void ObjectEventMoveDestCoords(struct ObjectEvent *, u32, s16 *, s16 *);
-void sub_8086230(void);
void CB2_ReturnToField(void);
-bool32 sub_8087598(void);
void CB2_ReturnToFieldContinueScriptPlayMapMusic(void);
void WarpIntoMap(void);
-u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum);
-void sub_8086194(void);
-void sub_8084CCC(u8 spawn);
+u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum);
void SetWarpDestinationToMapWarp(s8 mapGroup, s8 mapNum, s8 warpNum);
void c2_load_new_map(void);
void SetWarpDestinationToDynamicWarp(u8 unused);
void mapldr_default(void);
u32 GetGameStat(u8 statId);
-u32 SetGameStat(u8 statId, u32 value);
+void SetGameStat(u8 statId, u32 value);
void CB2_ContinueSavedGame(void);
void sub_8055D5C(struct WarpData *);
@@ -141,8 +132,8 @@ extern u8 gUnknown_2036E28;
extern bool8 (* gFieldCallback2)(void);
void SetLastHealLocationWarp(u8 healLocaionId);
-void sub_8055864(u8 mapGroup, u8 mapNum);
-void CB2_Overworld(void);
+void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum);
+void sub_80568FC(void);
void CB2_OverworldBasic(void);
void CB2_NewGame(void);
bool8 IsMapTypeOutdoors(u8 mapType);
@@ -153,13 +144,13 @@ void Overworld_FadeOutMapMusic(void);
void CB2_LoadMap(void);
bool8 BGMusicStopped(void);
bool8 IsMapTypeIndoors(u8 mapType);
-bool32 sub_8055C9C(void);
+bool32 Overworld_IsBikingAllowed(void);
void Overworld_ResetStateAfterDigEscRope(void);
bool32 sub_8058244(void);
u8 GetCurrentMapType(void);
u8 GetLastUsedWarpMapType(void);
-const struct MapHeader *warp1_get_mapheader(void);
+const struct MapHeader *const GetDestinationWarpMapHeader(void);
void TryFadeOutOldMapMusic(void);
void CB2_ReturnToFieldCableClub(void);
void ResetGameStats(void);
@@ -171,28 +162,29 @@ bool32 sub_8058318(void);
void CB2_ReturnToFieldWithOpenMenu(void);
void CB2_WhiteOut(void);
-void c2_8056854(void);
-void sub_8054F38(u32 newKey);
-void sub_8055778(int);
+void CB2_ReturnToFieldFromMultiplayer(void);
+void ApplyNewEncryptionKeyToGameStats(u32 newKey);
+void SetContinueGameWarpToDynamicWarp(int);
-void sub_8055738(u8 loc);
+void SetContinueGameWarpToHealLocation(u8 loc);
-void sub_8056078(void *, void *);
-void sub_805546C(u8 a0);
+void UpdateAmbientCry(s16 *state, u16 *delayCounter);
+void SetWarpDestinationToHealLocation(u8 a0);
bool32 sub_80582E0(void);
bool32 sub_8058274(void);
+void OverworldWhiteOutGetMoneyLoss(void);
u8 GetCurrentMapBattleScene(void);
void Overworld_ResetStateAfterFly(void);
bool8 sub_8055B38(u16 metatileBehavior);
-void sub_8055DB8(void);
-void sub_8057F5C(void);
-void sub_8057F34(void);
+void Overworld_ResetMapMusic(void);
+u16 QueueExitLinkRoomKey(void);
+u16 sub_8057F34(void);
u32 sub_8057EC0(void);
-void sub_8057F70(void);
-void sub_8057F48(void);
+u16 sub_8057F70(void);
+u16 sub_8057F48(void);
void SetMainCallback1(MainCallback cb);
void CB1_Overworld(void);
-void sub_80568C4(void);
+void CB2_ReturnToFieldContinueScript(void);
u8 GetLastUsedWarpMapSectionId(void);
void StoreInitialPlayerAvatarState(void);
void UpdateEscapeWarp(s16 x, s16 y);
diff --git a/include/quest_log.h b/include/quest_log.h
index 28c69505b..54da8822a 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -4,24 +4,12 @@
#include "global.h"
#include "quest_log_battle.h"
#include "constants/quest_log.h"
-
-struct UnkStruct_3005E90
-{
- u8 unk_0;
- u8 unk_1_0:1;
- u8 unk_1_1:1;
- u8 unk_1_2:1;
- u8 unk_1_3:1;
- u8 unk_1_4:1;
- u8 unk_2;
-};
+#include "field_control_avatar.h"
extern u8 gQuestLogState;
extern u8 gUnknown_3005E88;
-extern u16 sNumEventsInLogEntry;
-extern struct UnkStruct_3005E90 gUnknown_3005E90;
-extern struct QuestLogEntry * sCurQuestLogEntry;
extern const u16 gUnknown_84566A8[];
+extern struct FieldInput gUnknown_3005E90;
void sub_8112720(u8);
void SetQuestLogEvent(u16, const u16 *);
@@ -59,5 +47,20 @@ void sub_8112628(u8 movementActionId);
void sub_81126AC(u8 movementActionId, u8 duration);
void sub_8112588(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId, u8 duration);
void sub_8112C9C(void);
+void sub_8110920(void);
+void sub_8111708(void);
+void sub_81127F8(struct FieldInput * a0);
+void sub_8112B3C(void);
+void RunQuestLogCB(void);
+void sub_8111C68(void);
+bool8 sub_8111CD0(void);
+void sub_8115798(void);
+bool8 sub_8113748(void);
+void sub_81119C8(void);
+void sub_8111F14(void);
+void sub_8110FCC(void);
+u8 sub_8110AC8(void);
+void sub_81113E4(void);
+void sub_8111438(void);
#endif //GUARD_QUEST_LOG_H
diff --git a/include/quest_log_objects.h b/include/quest_log_objects.h
index d3e11d11f..fbf73f504 100644
--- a/include/quest_log_objects.h
+++ b/include/quest_log_objects.h
@@ -5,5 +5,6 @@
void SetQuestLogObjectEventsData(struct QuestLog *);
void SetSav1ObjectEventsFromQuestLog(struct QuestLog *, struct ObjectEventTemplate *);
+void sub_815A540(void);
#endif //GUARD_QUEST_LOG_OBJECTS_H
diff --git a/include/script.h b/include/script.h
index 3dd91ca59..a37909137 100644
--- a/include/script.h
+++ b/include/script.h
@@ -49,12 +49,12 @@ u8 *mapheader_get_tagged_pointer(u8 tag);
void mapheader_run_script_by_tag(u8 tag);
u8 *mapheader_get_first_match_from_tagged_ptr_list(u8 tag);
void RunOnLoadMapScript(void);
-void mapheader_run_script_with_tag_x3(void);
-void mapheader_run_script_with_tag_x5(void);
-void mapheader_run_script_with_tag_x7(void);
-void mapheader_run_script_with_tag_x6(void);
+void RunOnTransitionMapScript(void);
+void RunOnResumeMapScript(void);
+void RunOnReturnToFieldMapScript(void);
+void RunOnDiveWarpMapScript(void);
bool8 TryRunOnFrameMapScript(void);
-void mapheader_run_first_tag4_script_list_match(void);
+void TryRunOnWarpIntoMapScript(void);
u32 CalculateRamScriptChecksum(void);
void ClearRamScript(void);
bool8 InitRamScript(u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objectId);
diff --git a/include/strings.h b/include/strings.h
index 37d856a86..eb6a47ce7 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1037,8 +1037,8 @@ extern const u8 gText_RegionMap_AreaDesc_PatternBush[];
extern const u8 gText_RegionMap_AreaDesc_DottedHole[];
// field_screen_effect
-extern const u8 gUnknown_841B554[];
-extern const u8 gUnknown_841B5B6[];
+extern const u8 gText_PlayerScurriedToCenter[];
+extern const u8 gText_PlayerScurriedBackHome[];
// save_failed_screen
extern const u8 gText_SaveFailedScreen_CheckingBackupMemory[];
diff --git a/include/vs_seeker.h b/include/vs_seeker.h
index d80e558ea..8c3b86194 100644
--- a/include/vs_seeker.h
+++ b/include/vs_seeker.h
@@ -15,5 +15,6 @@ u8 sub_810CF54();
void sub_810D0D0(void);
void sub_810CB90(void);
bool8 sub_810C4EC(void);
+void TryUpdateRandomTrainerRematches(u16 mapGroup, u16 mapNum);
#endif //GUARD_VS_SEEKER_H
diff --git a/ld_script.txt b/ld_script.txt
index abc4be60b..ecea5f2dd 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -87,7 +87,7 @@ SECTIONS {
src/trade_scene.o(.text);
src/play_time.o(.text);
src/new_game.o(.text);
- asm/overworld.o(.text);
+ src/overworld.o(.text);
src/fieldmap.o(.text);
src/metatile_behavior.o(.text);
src/field_camera.o(.text);
@@ -427,7 +427,7 @@ SECTIONS {
src/pokeball.o(.rodata);
src/trade.o(.rodata);
src/trade_scene.o(.rodata);
- data/overworld.o(.rodata);
+ src/overworld.o(.rodata);
data/tilesets.o(.rodata);
data/maps.o(.rodata);
src/fieldmap.o(.rodata);
diff --git a/src/bg_regs.c b/src/bg_regs.c
index d5879a862..ec884e4f7 100644
--- a/src/bg_regs.c
+++ b/src/bg_regs.c
@@ -25,7 +25,7 @@ vu16 *const gBGVOffsetRegs[] =
};
const u16 gDISPCNTBGFlags[] = { DISPCNT_BG0_ON, DISPCNT_BG1_ON, DISPCNT_BG2_ON, DISPCNT_BG3_ON };
-const u16 gBLDCNTTarget2BGFlags[] = { BLDCNT_TGT2_BG0, BLDCNT_TGT2_BG1, BLDCNT_TGT2_BG2, BLDCNT_TGT2_BG3 };
+const u16 gOverworldBackgroundLayerFlags[] = { BLDCNT_TGT2_BG0, BLDCNT_TGT2_BG1, BLDCNT_TGT2_BG2, BLDCNT_TGT2_BG3 };
const u16 gBLDCNTTarget1BGFlags[] = { BLDCNT_TGT1_BG0, BLDCNT_TGT1_BG1, BLDCNT_TGT1_BG2, BLDCNT_TGT1_BG3 };
const u8 gBGControlRegOffsets[] =
diff --git a/src/bike.c b/src/bike.c
index 5ec44ec7a..eaa4af2bd 100644
--- a/src/bike.c
+++ b/src/bike.c
@@ -260,7 +260,7 @@ bool8 sub_80BD460(u8 r0)
bool32 IsRunningDisallowed(u8 metatileBehavior)
{
- if (!(gMapHeader.escapeRope & 2)) // wrong name? probably a bitfield.
+ if (!(gMapHeader.flags & MAP_ALLOW_RUN))
return TRUE;
if (sub_80BD4B8(metatileBehavior) != TRUE)
return FALSE;
diff --git a/src/cable_club.c b/src/cable_club.c
index bc41ca4f6..e75f1abf8 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -724,7 +724,7 @@ static void sub_8081624(void)
void CB2_ReturnFromCableClubBattle(void)
{
gBattleTypeFlags &= (u16)~BATTLE_TYPE_20;
- sub_8055DB8();
+ Overworld_ResetMapMusic();
LoadPlayerParty();
SavePlayerBag();
Special_UpdateTrainerFansAfterLinkBattle();
@@ -750,7 +750,7 @@ void CB2_ReturnFromCableClubBattle(void)
}
else
{
- gMain.savedCallback = c2_8056854;
+ gMain.savedCallback = CB2_ReturnToFieldFromMultiplayer;
}
SetMainCallback2(CB2_SetUpSaveAfterLinkBattle);
}
@@ -767,7 +767,7 @@ void CleanupLinkRoomState(void)
void ExitLinkRoom(void)
{
- sub_8057F5C();
+ QueueExitLinkRoomKey();
}
static void Task_EnterCableClubSeat(u8 taskId)
diff --git a/src/credits.c b/src/credits.c
index 4d7bbd67b..12240c98f 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "malloc.h"
#include "bg.h"
+#include "credits.h"
#include "palette.h"
#include "gpu_regs.h"
#include "task.h"
@@ -563,94 +564,81 @@ static const struct SpriteTemplate sGroundSpriteTemplate_Static = {
};
static const struct CreditsOverworldCmd sOverworldCmd_Route23[] = {
- { 0x00fe, MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23) },
- { 0x000b, 0x006b, 0x0001 },
- { 0x0000, 0x0001, 0x0500 }, // Scroll down
- { 0x00fd, 0x00fd, 0x00fd }
+ CREDITSOVWLDLOADMAP(ROUTE23, 11, 107, 1),
+ CREDITSOVWLDSCROLL(0, 1, 0x0500), // Scroll down
+ CREDITSOVWLDEND
};
static const struct CreditsOverworldCmd sOverworldCmd_ViridianCity[] = {
- { 0x00fe, MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY) },
- { 0x001e, 0x0022, 0x0001 },
- { 0x0000, 0xffff, 0x0500 }, // Scroll up
- { 0x00fd, 0x00fd, 0x00fd }
+ CREDITSOVWLDLOADMAP(VIRIDIAN_CITY, 30, 34, 1),
+ CREDITSOVWLDSCROLL(0, -1, 0x0500), // Scroll up
+ CREDITSOVWLDEND
};
static const struct CreditsOverworldCmd sOverworldCmd_PewterCity[] = {
- { 0x00fe, MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY) },
- { 0x0014, 0x001a, 0x0001 },
- { 0x0000, 0xffff, 0x0500 }, // Scroll up
- { 0x00fd, 0x00fd, 0x00fd }
+ CREDITSOVWLDLOADMAP(PEWTER_CITY, 20, 26, 1),
+ CREDITSOVWLDSCROLL(0, -1, 0x0500), // Scroll up
+ CREDITSOVWLDEND
};
static const struct CreditsOverworldCmd sOverworldCmd_CeruleanCity[] = {
- { 0x00fe, MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY) },
- { 0x0008, 0x0006, 0x0001 },
- { 0x0001, 0x0001, 0x0500 }, // Scroll right and down
- { 0x00fd, 0x00fd, 0x00fd }
+ CREDITSOVWLDLOADMAP(CERULEAN_CITY, 8, 6, 1),
+ CREDITSOVWLDSCROLL(1, 1, 0x0500), // Scroll right and down
+ CREDITSOVWLDEND
};
static const struct CreditsOverworldCmd sOverworldCmd_Route25[] = {
- { 0x00fe, MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) },
- { 0x0019, 0x0006, 0x0001 },
- { 0x0001, 0x0000, 0x0500 }, // Scroll right
- { 0x00fd, 0x00fd, 0x00fd }
+ CREDITSOVWLDLOADMAP(ROUTE25, 25, 6, 1),
+ CREDITSOVWLDSCROLL(1, 0, 0x0500), // Scroll right
+ CREDITSOVWLDEND
};
static const struct CreditsOverworldCmd sOverworldCmd_VermilionCity[] = {
- { 0x00fe, MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY) },
- { 0x0009, 0x0007, 0x0001 },
- { 0x0001, 0x0001, 0x0500 }, // Scroll right and down
- { 0x00fd, 0x00fd, 0x00fd }
+ CREDITSOVWLDLOADMAP(VERMILION_CITY, 9, 7, 1),
+ CREDITSOVWLDSCROLL(1, 1, 0x0500), // Scroll right and down
+ CREDITSOVWLDEND
};
static const struct CreditsOverworldCmd sOverworldCmd_Route10[] = {
- { 0x00fe, MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) },
- { 0x000b, 0x0044, 0x0001 },
- { 0x0000, 0x0001, 0x0500 }, // Scroll down
- { 0x00fd, 0x00fd, 0x00fd }
+ CREDITSOVWLDLOADMAP(ROUTE10, 11, 68, 1),
+ CREDITSOVWLDSCROLL(0, 1, 0x0500), // Scroll down
+ CREDITSOVWLDEND
};
static const struct CreditsOverworldCmd sOverworldCmd_CeladonCity[] = {
- { 0x00fe, MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY) },
- { 0x0030, 0x0010, 0x0001 },
- { 0xffff, 0x0000, 0x0500 }, // Scroll left
- { 0x00fd, 0x00fd, 0x00fd }
+ CREDITSOVWLDLOADMAP(CELADON_CITY, 48, 16, 1),
+ CREDITSOVWLDSCROLL(-1, 0, 0x0500), // Scroll left
+ CREDITSOVWLDEND
};
static const struct CreditsOverworldCmd sOverworldCmd_SaffronCity[] = {
- { 0x00fe, MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY) },
- { 0x0027, 0x0005, 0x0001 },
- { 0x0000, 0x0001, 0x0500 }, // Scroll down
- { 0x00fd, 0x00fd, 0x00fd }
+ CREDITSOVWLDLOADMAP(SAFFRON_CITY, 39, 5, 1),
+ CREDITSOVWLDSCROLL(0, 1, 0x0500), // Scroll down
+ CREDITSOVWLDEND
};
static const struct CreditsOverworldCmd sOverworldCmd_Route17[] = {
- { 0x00fe, MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) },
- { 0x0007, 0x002b, 0x0001 },
- { 0x0000, 0x0001, 0x0500 }, // Scroll down
- { 0x00fd, 0x00fd, 0x00fd }
+ CREDITSOVWLDLOADMAP(ROUTE17, 7, 43, 1),
+ CREDITSOVWLDSCROLL(0, 1, 0x0500), // Scroll down
+ CREDITSOVWLDEND
};
static const struct CreditsOverworldCmd sOverworldCmd_FuchsiaCity[] = {
- { 0x00fe, MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY) },
- { 0x001c, 0x0005, 0x0001 },
- { 0x0000, 0x0001, 0x0500 }, // Scroll down
- { 0x00fd, 0x00fd, 0x00fd }
+ CREDITSOVWLDLOADMAP(FUCHSIA_CITY, 28, 5, 1),
+ CREDITSOVWLDSCROLL(0, 1, 0x0500), // Scroll down
+ CREDITSOVWLDEND
};
static const struct CreditsOverworldCmd sOverworldCmd_CinnabarIsland[] = {
- { 0x00fe, MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND) },
- { 0x000d, 0x0011, 0x0001 },
- { 0x0000, 0xffff, 0x0500 }, // Scroll up
- { 0x00fd, 0x00fd, 0x00fd }
+ CREDITSOVWLDLOADMAP(CINNABAR_ISLAND, 13, 17, 1),
+ CREDITSOVWLDSCROLL(0, -1, 0x0500), // Scroll up
+ CREDITSOVWLDEND
};
static const struct CreditsOverworldCmd sOverworldCmd_Route21[] = {
- { 0x00fe, MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) },
- { 0x0008, 0x0014, 0x0001 },
- { 0x0000, 0xffff, 0x0500 }, // Scroll up
- { 0x00fd, 0x00fd, 0x00fd },
+ CREDITSOVWLDLOADMAP(ROUTE21_NORTH, 8, 20, 1),
+ CREDITSOVWLDSCROLL(0, -1, 0x0500), // Scroll up
+ CREDITSOVWLDEND,
};
static const struct CreditsOverworldCmd *const sOverworldMapScenes[] = {
diff --git a/src/daycare.c b/src/daycare.c
index e07c2a234..1e50a7c09 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1766,7 +1766,7 @@ static void Task_EggHatch(u8 taskID)
{
CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_EggHatch_0);
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
DestroyTask(taskID);
}
}
diff --git a/src/diploma.c b/src/diploma.c
index f702eebd5..5c653d071 100644
--- a/src/diploma.c
+++ b/src/diploma.c
@@ -193,7 +193,7 @@ static void Task_DiplomaReturnToOverworld(u8 taskId)
DestroyTask(taskId);
FreeAllWindowBuffers();
FREE_AND_SET_NULL(gDiploma);
- SetMainCallback2(CB2_Overworld);
+ SetMainCallback2(sub_80568FC);
}
static void DiplomaBgInit(void)
diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c
index 4b3c70b67..948b7c39f 100644
--- a/src/easy_chat_2.c
+++ b/src/easy_chat_2.c
@@ -279,7 +279,7 @@ void ShowEasyChatScreen(void)
default:
return;
}
- DoEasyChatScreen(gSpecialVar_0x8004, words, sub_80568C4);
+ DoEasyChatScreen(gSpecialVar_0x8004, words, CB2_ReturnToFieldContinueScript);
}
static const u16 sECPhrase_MysteryEventIsExciting[] = {
diff --git a/src/event_data.c b/src/event_data.c
index f16267c98..c012a4a59 100644
--- a/src/event_data.c
+++ b/src/event_data.c
@@ -38,7 +38,7 @@ void InitEventData(void)
memset(sSpecialFlags, 0, SPECIAL_FLAGS_COUNT);
}
-void sub_806E110(void)
+void ClearTempFieldEventData(void)
{
memset(gSaveBlock1Ptr->flags, 0, 4);
memset(gSaveBlock1Ptr->vars, 0, 16 * 2);
diff --git a/src/field_effect.c b/src/field_effect.c
index b59ce5a6b..c0d7d3463 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -2064,7 +2064,7 @@ static void EscapeRopeFieldEffect_Step1(struct Task * task)
if (data[4] == 1 && !gPaletteFade.active && BGMusicStopped() == TRUE)
{
SetObjectEventDirection(playerObj, task->data[15]);
- sub_80555E0();
+ SetWarpDestinationToEscapeWarp();
WarpIntoMap();
gFieldCallback = FieldCallback_EscapeRopeExit;
SetMainCallback2(CB2_LoadMap);
@@ -2331,7 +2331,7 @@ static void TeleportFieldEffectTask4(struct Task * task)
{
if (BGMusicStopped() == TRUE)
{
- copy_saved_warp3_bank_and_enter_x_to_warp1();
+ SetWarpDestinationToLastHealLocation();
WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
gFieldCallback = FieldCallback_TeleportIn;
diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c
index 03190c095..bf5ab0ab3 100644
--- a/src/field_fadetransition.c
+++ b/src/field_fadetransition.c
@@ -94,7 +94,7 @@ void FadeInFromBlack(void)
void WarpFadeOutScreen(void)
{
- const struct MapHeader *header = warp1_get_mapheader();
+ const struct MapHeader *header = GetDestinationWarpMapHeader();
if (header->regionMapSectionId != gMapHeader.regionMapSectionId && MapHasPreviewScreen(header->regionMapSectionId, MPS_TYPE_CAVE))
FadeScreen(FADE_TO_BLACK, 0);
else
@@ -113,7 +113,7 @@ void WarpFadeOutScreen(void)
static void sub_807DC70(void)
{
- switch (MapTransitionIsEnter(GetCurrentMapType(), warp1_get_mapheader()->mapType))
+ switch (MapTransitionIsEnter(GetCurrentMapType(), GetDestinationWarpMapHeader()->mapType))
{
case FALSE:
FadeScreen(FADE_TO_BLACK, 3);
@@ -152,7 +152,7 @@ static void task0A_asap_script_env_2_enable_and_set_ctx_running(u8 taskId)
}
}
-void FieldCallback_ReturnToEventScript2(void)
+void FieldCB_ContinueScriptHandleMusic(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
@@ -160,7 +160,7 @@ void FieldCallback_ReturnToEventScript2(void)
CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10);
}
-void sub_807DD44(void)
+void FieldCB_ContinueScript(void)
{
ScriptContext2_Enable();
FadeInFromBlack();
@@ -193,7 +193,7 @@ static void task_mpl_807DD60(u8 taskId)
}
}
-void FieldCB_ReturnToFieldWiredLink(void)
+void FieldCB_ReturnToFieldCableLink(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
@@ -284,7 +284,7 @@ static void sub_807DF4C(bool8 a0)
FadeInFromBlack();
}
-void FieldCB_UnionRoomWarp(void)
+void FieldCB_DefaultWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
sub_8111CF0();
@@ -292,7 +292,7 @@ void FieldCB_UnionRoomWarp(void)
ScriptContext2_Enable();
}
-void sub_807DF7C(void)
+void FieldCB_WarpExitFadeFromBlack(void)
{
Overworld_PlaySpecialMapMusic();
sub_8111CF0();
@@ -491,7 +491,7 @@ void FadeTransition_FadeInOnReturnToStartMenu(void)
ScriptContext2_Enable();
}
-bool8 FieldCB2_ReturnToStartMenuInit(void)
+bool8 FieldCB_ReturnToFieldOpenStartMenu(void)
{
SetUpReturnToStartMenu();
return FALSE;
@@ -535,7 +535,7 @@ void DoWarp(void)
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
PlaySE(SE_KAIDAN);
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(sub_807E718, 10);
}
@@ -545,7 +545,7 @@ void DoDiveWarp(void)
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(sub_807E718, 10);
}
@@ -560,7 +560,7 @@ void sub_807E4A0(u16 metatileBehavior, u16 delay)
void DoDoorWarp(void)
{
ScriptContext2_Enable();
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(sub_807E80C, 10);
}
@@ -574,7 +574,7 @@ void sub_807E500(void)
void DoUnionRoomWarp(void)
{
ScriptContext2_Enable();
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(Task_TeleportWarp, 10);
}
@@ -833,7 +833,7 @@ static void sub_807E980(u8 taskId)
data[0]++;
break;
default:
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
DestroyTask(taskId);
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index 0bc4910eb..6b51e7bc2 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -1152,7 +1152,7 @@ u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender)
return sPlayerAvatarGfxIds[state][gender];
}
-u8 GetHoennLinkPartnerGraphicsIdByGender(u8 gender)
+u8 GetRSAvatarGraphicsIdByGender(u8 gender)
{
return sHoennLinkPartnerGfxIds[gender];
}
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index a12b57b24..22043ed2d 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -360,7 +360,7 @@ static void Task_BarnDoorWipeChild(u8 taskId)
#undef DIR_WIPE_OUT
#undef tChildOffset
-static bool8 sub_807F3A4(u8 taskId, const u8 *text, u8 x, u8 y)
+static bool8 PrintWhiteOutRecoveryMessage(u8 taskId, const u8 *text, u8 x, u8 y)
{
u8 windowId = gTasks[taskId].data[1];
@@ -385,7 +385,7 @@ static bool8 sub_807F3A4(u8 taskId, const u8 *text, u8 x, u8 y)
return FALSE;
}
-static void sub_807F45C(u8 taskId)
+static void Task_RushInjuredPokemonToCenter(u8 taskId)
{
u8 windowId;
const struct HealLocation *loc;
@@ -399,7 +399,7 @@ static void sub_807F45C(u8 taskId)
FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
PutWindowTilemap(windowId);
CopyWindowToVram(windowId, 3);
- loc = GetHealLocationPointer(1);
+ loc = GetHealLocation(1);
if (gSaveBlock1Ptr->lastHealLocation.mapGroup == loc->group
&& gSaveBlock1Ptr->lastHealLocation.mapNum == loc->map
&& gSaveBlock1Ptr->lastHealLocation.warpId == -1
@@ -410,14 +410,14 @@ static void sub_807F45C(u8 taskId)
gTasks[taskId].data[0] = 1;
break;
case 1:
- if (sub_807F3A4(taskId, gUnknown_841B554, 2, 8))
+ if (PrintWhiteOutRecoveryMessage(taskId, gText_PlayerScurriedToCenter, 2, 8))
{
ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], 2);
++gTasks[taskId].data[0];
}
break;
case 4:
- if (sub_807F3A4(taskId, gUnknown_841B5B6, 2, 8))
+ if (PrintWhiteOutRecoveryMessage(taskId, gText_PlayerScurriedBackHome, 2, 8))
{
ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], 2);
++gTasks[taskId].data[0];
@@ -450,12 +450,12 @@ static void sub_807F45C(u8 taskId)
}
}
-void sub_807F5F0(void)
+void FieldCB_RushInjuredPokemonToCenter(void)
{
u8 taskId;
ScriptContext2_Enable();
palette_bg_faded_fill_black();
- taskId = CreateTask(sub_807F45C, 10);
+ taskId = CreateTask(Task_RushInjuredPokemonToCenter, 10);
gTasks[taskId].data[0] = 0;
}
diff --git a/src/field_specials.c b/src/field_specials.c
index 59c026b78..657c80a40 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -108,7 +108,7 @@ void ForcePlayerOntoBike(void)
Overworld_ChangeMusicTo(MUS_CYCLING);
}
-void nullsub_74(void)
+void ResetCyclingRoadChallengeData(void)
{
}
@@ -840,9 +840,9 @@ static const u8 sElevatorWindowAnimDuration[] = {
void GetElevatorFloor(void)
{
u16 floor = 4;
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_B1F))
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_B1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(SILPH_CO_1F):
floor = 4;
@@ -888,9 +888,9 @@ void GetElevatorFloor(void)
break;
}
}
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_1F))
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_1F):
floor = 4;
@@ -909,9 +909,9 @@ void GetElevatorFloor(void)
break;
}
}
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(TRAINER_TOWER_1F))
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(TRAINER_TOWER_1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(TRAINER_TOWER_1F):
case MAP_NUM(TRAINER_TOWER_2F):
@@ -937,9 +937,9 @@ u16 InitElevatorFloorSelectMenuPos(void)
sElevatorScroll = 0;
sElevatorCursorPos = 0;
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_B1F))
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_B1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(SILPH_CO_11F):
sElevatorScroll = 0;
@@ -999,9 +999,9 @@ u16 InitElevatorFloorSelectMenuPos(void)
break;
}
}
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_1F))
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_5F):
sElevatorScroll = 0;
@@ -1025,9 +1025,9 @@ u16 InitElevatorFloorSelectMenuPos(void)
break;
}
}
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(TRAINER_TOWER_1F))
+ if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(TRAINER_TOWER_1F))
{
- switch (gSaveBlock1Ptr->warp2.mapNum)
+ switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(TRAINER_TOWER_1F):
case MAP_NUM(TRAINER_TOWER_2F):
@@ -2037,10 +2037,10 @@ const u16 sPokeCenter1FMaps[] = {
MAP_UNDEFINED
};
-bool8 sub_80CC87C(void)
+bool8 UsedPokemonCenterWarp(void)
{
s32 i;
- u16 mapno = (gUnknown_2031DB4.mapGroup << 8) + gUnknown_2031DB4.mapNum;
+ u16 mapno = (gLastUsedWarp.mapGroup << 8) + gLastUsedWarp.mapNum;
for (i = 0; sPokeCenter1FMaps[i] != MAP_UNDEFINED; i++)
{
if (sPokeCenter1FMaps[i] == mapno)
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 6bd4b6f46..4c7b93f20 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -63,7 +63,7 @@ static void Task_RunTimeBasedEvents(u8 taskId)
{
if (gQuestLogState != 2 && gQuestLogState != 3)
{
- sub_8056078(&data[1], &data[2]);
+ UpdateAmbientCry(&data[1], &data[2]);
}
}
}
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 53a97629f..60c6f3dae 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -370,7 +370,7 @@ union Block
s32 xprime; \
s32 yprime; \
\
- struct MapLayout *mapLayout = gMapHeader.mapLayout; \
+ const struct MapLayout *mapLayout = gMapHeader.mapLayout; \
\
xprime = x - 7; \
xprime += 8 * mapLayout->borderWidth; \
@@ -485,7 +485,7 @@ void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2)
}
}
-u32 GetBehaviorByMetatileIdAndMapLayout(struct MapLayout *mapLayout, u16 metatile, u8 attr)
+u32 GetBehaviorByMetatileIdAndMapLayout(const struct MapLayout *mapLayout, u16 metatile, u8 attr)
{
u32 * attributes;
@@ -732,7 +732,7 @@ bool8 CameraMove(s32 x, s32 y)
old_y = gSaveBlock1Ptr->pos.y;
connection = sub_8059600(direction, gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y);
sub_80594AC(connection, direction, x, y);
- sub_8055864(connection->mapGroup, connection->mapNum);
+ LoadMapFromCameraTransition(connection->mapGroup, connection->mapNum);
gCamera.active = TRUE;
gCamera.x = old_x - gSaveBlock1Ptr->pos.x;
gCamera.y = old_y - gSaveBlock1Ptr->pos.y;
diff --git a/src/heal_location.c b/src/heal_location.c
index a8ac8cb46..ae02c7844 100644
--- a/src/heal_location.c
+++ b/src/heal_location.c
@@ -50,7 +50,7 @@ static const struct HealLocation * GetHealLocationPointerFromMapGroupAndNum(u16
return &sSpawnPoints[i - 1];
}
-const struct HealLocation * GetHealLocationPointer(u32 idx)
+const struct HealLocation * GetHealLocation(u32 idx)
{
if (idx == 0)
return NULL;
diff --git a/src/item_use.c b/src/item_use.c
index df3dbaceb..af3243678 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -268,7 +268,7 @@ void FieldUseFunc_MachBike(u8 taskId)
|| MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE
|| MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE)
sub_80A10C4(taskId, gTasks[taskId].data[3], 2, gUnknown_8416451);
- else if (sub_8055C9C() == TRUE && !sub_80BD540())
+ else if (Overworld_IsBikingAllowed() == TRUE && !sub_80BD540())
{
sItemUseOnFieldCB = ItemUseOnFieldCB_Bicycle;
sub_80A103C(taskId);
@@ -618,7 +618,7 @@ static void sub_80A1B48(u8 taskId)
bool8 CanUseEscapeRopeOnCurrMap(void)
{
- if (gMapHeader.escapeRope & 1)
+ if (gMapHeader.flags & MAP_ALLOW_ESCAPE_ROPE)
return TRUE;
else
return FALSE;
diff --git a/src/itemfinder.c b/src/itemfinder.c
index 5d6950acc..51a670b0f 100644
--- a/src/itemfinder.c
+++ b/src/itemfinder.c
@@ -15,7 +15,7 @@
static void Task_NoResponse_CleanUp(u8 taskId);
static void Task_ItemfinderResponseSoundsAndAnims(u8 taskId);
static void Task_ItemfinderUnderfootSoundsAndAnims(u8 taskId);
-static bool8 HiddenItemIsWithinRangeOfPlayer(struct MapEvents * events, u8 taskId);
+static bool8 HiddenItemIsWithinRangeOfPlayer(const struct MapEvents * events, u8 taskId);
static void SetUnderfootHiddenItem(u8 taskId, u32 hiddenItem);
static void SetNormalHiddenItem(u8 taskId);
static void FindHiddenItemsInConnectedMaps(u8 taskId);
@@ -199,7 +199,7 @@ static void Task_ItemfinderUnderfootSoundsAndAnims(u8 taskId)
tDingTimer++;
}
-static bool8 HiddenItemIsWithinRangeOfPlayer(struct MapEvents * events, u8 taskId)
+static bool8 HiddenItemIsWithinRangeOfPlayer(const struct MapEvents * events, u8 taskId)
{
s16 x, y, i, dx, dy;
PlayerGetDestCoords(&x, &y);
@@ -284,7 +284,7 @@ static void SetNormalHiddenItem(u8 taskId)
}
}
-static bool8 HiddenItemAtPos(struct MapEvents * events, s16 x, s16 y)
+static bool8 HiddenItemAtPos(const struct MapEvents * events, s16 x, s16 y)
{
u8 bgEventCount = events->bgEventCount;
struct BgEvent * bgEvents = events->bgEvents;
diff --git a/src/learn_move.c b/src/learn_move.c
index 8a2f5781b..8cf10cffa 100644
--- a/src/learn_move.c
+++ b/src/learn_move.c
@@ -286,7 +286,7 @@ static void Task_InitMoveRelearnerMenu(u8 taskId)
if (!gPaletteFade.active)
{
SetMainCallback2(CB2_MoveRelearner_Init);
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
DestroyTask(taskId);
}
}
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
index 2259e9214..15ffb4813 100644
--- a/src/link_rfu_2.c
+++ b/src/link_rfu_2.c
@@ -201,7 +201,7 @@ void ResetLinkRfuGFLayer(void)
}
ResetSendDataManager(&Rfu.cmd_8800_sendbuf);
RFU_queue_20_70_reset(&Rfu.unk_124);
- RFU_queue_40_14_reset(&Rfu.unk_9e8);
+ RFU_queue_40_14_reset(&Rfu.sendQueue);
CpuFill16(0, gSendCmd, sizeof gSendCmd);
CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers);
@@ -659,7 +659,7 @@ static void sub_80F906C(void)
}
if (Rfu.unk_c3c == 0)
{
- RFU_queue_40_14_send(&Rfu.unk_9e8, Rfu.unk_4c);
+ RFU_queue_40_14_send(&Rfu.sendQueue, Rfu.unk_4c);
RFU_queue_2_14_recv(&Rfu.unk_c1c, Rfu.unk_4c);
}
}
@@ -881,7 +881,7 @@ static bool32 RfuProcessEnqueuedRecvBlock(void)
Rfu.unk_cd0--;
CallRfuFunc();
sub_80F94BC(gSendCmd, sp48);
- RFU_queue_40_14_recv(&Rfu.unk_9e8, sp48);
+ RFU_queue_40_14_recv(&Rfu.sendQueue, sp48);
for (i = 0; i < CMD_LENGTH - 1; i++)
gSendCmd[i] = 0;
}
@@ -909,7 +909,7 @@ static void HandleSendFailure(u8 unused, u32 flags)
j++;j--; // Needed to match;
}
- RFU_queue_40_14_recv(&Rfu.unk_9e8, sResendBlock8);
+ RFU_queue_40_14_recv(&Rfu.sendQueue, sResendBlock8);
Rfu.cmd_8800_sendbuf.failedFlags |= (1 << i);
}
flags >>= 1;
@@ -1853,11 +1853,11 @@ static void RfuCheckErrorStatus(void)
gWirelessCommType = 2;
SetMainCallback2(CB2_LinkError);
gMain.savedCallback = CB2_LinkError;
- SetLinkErrorFromRfu((Rfu.linkman_msg << 16) | (Rfu.linkman_param[0] << 8) | Rfu.linkman_param[1], Rfu.unk_124.count, Rfu.unk_9e8.count, RfuGetErrorStatus() == 2);
+ SetLinkErrorFromRfu((Rfu.linkman_msg << 16) | (Rfu.linkman_param[0] << 8) | Rfu.linkman_param[1], Rfu.unk_124.count, Rfu.sendQueue.count, RfuGetErrorStatus() == 2);
Rfu.errorState = 2;
CloseLink();
}
- else if (Rfu.unk_9e8.full == 1 || Rfu.unk_124.full == 1)
+ else if (Rfu.sendQueue.full == 1 || Rfu.unk_124.full == 1)
{
if (lman.childClockSlave_flag)
rfu_LMAN_requestChangeAgbClockMaster();
@@ -2851,7 +2851,7 @@ static const char gUnknown_843EEA8[][8] = {
static u32 sub_80FC44C(void)
{
- return Rfu.unk_9e8.count;
+ return Rfu.sendQueue.count;
}
u32 GetRfuRecvQueueLength(void)
diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c
index d3f6e93db..8382f1dab 100644
--- a/src/link_rfu_3.c
+++ b/src/link_rfu_3.c
@@ -184,7 +184,7 @@ void RFU_queue_20_70_reset(struct UnkRfuStruct_2_Sub_124 *queue)
queue->full = 0;
}
-void RFU_queue_40_14_reset(struct UnkRfuStruct_2_Sub_9e8 *ptr)
+void RFU_queue_40_14_reset(struct RfuSendQueue *ptr)
{
s32 i;
s32 j;
@@ -260,7 +260,7 @@ void RFU_queue_20_70_recv(struct UnkRfuStruct_2_Sub_124 *queue, u8 *data)
}
}
-void RFU_queue_40_14_recv(struct UnkRfuStruct_2_Sub_9e8 *queue, u8 *data)
+void RFU_queue_40_14_recv(struct RfuSendQueue *queue, u8 *data)
{
s32 i;
u16 imeBak;
@@ -325,7 +325,7 @@ bool8 RFU_queue_20_70_send(struct UnkRfuStruct_2_Sub_124 *queue, u8 *dest)
return TRUE;
}
-bool8 RFU_queue_40_14_send(struct UnkRfuStruct_2_Sub_9e8 *queue, u8 *dest)
+bool8 RFU_queue_40_14_send(struct RfuSendQueue *queue, u8 *dest)
{
s32 i;
u16 imeBak;
diff --git a/src/load_save.c b/src/load_save.c
index 7ab28ffc3..9dff59928 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -127,24 +127,24 @@ void MoveSaveBlocks_ResetHeap(void)
gSaveBlock2Ptr->encryptionKey = encryptionKey;
}
-u32 sav2_x1_query_bit1(void)
+u32 UseContinueGameWarp(void)
{
return gSaveBlock2Ptr->specialSaveWarpFlags & CONTINUE_GAME_WARP;
}
-void sav2_x9_clear_bit1(void)
+void ClearContinueGameWarpStatus(void)
{
gSaveBlock2Ptr->specialSaveWarpFlags &= ~CONTINUE_GAME_WARP;
}
-void sub_804C1AC(void)
+void SetContinueGameWarpStatus(void)
{
gSaveBlock2Ptr->specialSaveWarpFlags |= CONTINUE_GAME_WARP;
}
void SetContinueGameWarpStatusToDynamicWarp(void)
{
- sub_8055778(0);
+ SetContinueGameWarpToDynamicWarp(0);
gSaveBlock2Ptr->specialSaveWarpFlags |= CONTINUE_GAME_WARP;
}
@@ -286,7 +286,7 @@ void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey)
for(i = 0; i < NUM_TOWER_CHALLENGE_TYPES; i++)
ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->trainerTower[i].bestTime, encryptionKey);
- sub_8054F38(encryptionKey);
+ ApplyNewEncryptionKeyToGameStats(encryptionKey);
ApplyNewEncryptionKeyToBagItems_(encryptionKey);
ApplyNewEncryptionKeyToBerryPowder(encryptionKey);
ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->money, encryptionKey);
diff --git a/src/map_name_popup.c b/src/map_name_popup.c
index 10e549cbd..87df371ce 100644
--- a/src/map_name_popup.c
+++ b/src/map_name_popup.c
@@ -18,7 +18,7 @@ static u16 MapNamePopupCreateWindow(bool32 palIntoFadedBuffer);
static void MapNamePopupPrintMapNameOnWindow(u16 windowId);
static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 flags);
-void CreateMapNamePopupIfNotAlreadyRunning(bool32 palIntoFadedBuffer)
+void ShowMapNamePopup(bool32 palIntoFadedBuffer)
{
u8 taskId;
if (FlagGet(FLAG_SPECIAL_FLAG_0x4000) != TRUE && !(gQuestLogState == 2 || gQuestLogState == 3))
@@ -151,9 +151,9 @@ static u16 MapNamePopupCreateWindow(bool32 palintoFadedBuffer)
};
u16 windowId;
u16 r6 = 0x01D;
- if (gMapHeader.flags != 0)
+ if (gMapHeader.floorNum != 0)
{
- if (gMapHeader.flags != 0x7F)
+ if (gMapHeader.floorNum != 0x7F)
{
windowTemplate.width += 5;
r6 = 0x027;
@@ -187,29 +187,29 @@ static void MapNamePopupPrintMapNameOnWindow(u16 windowId)
u32 maxWidth = 112;
u32 xpos;
u8 *ptr = GetMapName(mapName, gMapHeader.regionMapSectionId, 0);
- if (gMapHeader.flags != 0)
+ if (gMapHeader.floorNum != 0)
{
- ptr = MapNamePopupAppendFloorNum(ptr, gMapHeader.flags);
- maxWidth = gMapHeader.flags != 0x7F ? 152 : 176;
+ ptr = MapNamePopupAppendFloorNum(ptr, gMapHeader.floorNum);
+ maxWidth = gMapHeader.floorNum != 0x7F ? 152 : 176;
}
xpos = (maxWidth - GetStringWidth(2, mapName, -1)) / 2;
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
AddTextPrinterParameterized(windowId, 2, mapName, xpos, 2, 0xFF, NULL);
}
-static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 flags)
+static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 floorNum)
{
- if (flags == 0)
+ if (floorNum == 0)
return dest;
*dest++ = CHAR_SPACE;
- if (flags == 0x7F)
+ if (floorNum == 0x7F)
return StringCopy(dest, gUnknown_841D18D);
- if (flags < 0)
+ if (floorNum < 0)
{
*dest++ = CHAR_B;
- flags *= -1;
+ floorNum *= -1;
}
- dest = ConvertIntToDecimalStringN(dest, flags, STR_CONV_MODE_LEFT_ALIGN, 2);
+ dest = ConvertIntToDecimalStringN(dest, floorNum, STR_CONV_MODE_LEFT_ALIGN, 2);
*dest++ = CHAR_F;
*dest = EOS;
return dest;
diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c
index f75630802..77c839b89 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -199,7 +199,7 @@ bool8 MetatileBehavior_IsNonAnimDoor(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_ReturnFalse_2(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsDeepSouthWarp(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_IsSurfable(u8 metatileBehavior)
{
diff --git a/src/option_menu.c b/src/option_menu.c
index 62e90c33b..87306c98f 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -509,7 +509,7 @@ static void BufferOptionMenuString(u8 selection)
static void CloseAndSaveOptionMenu(u8 taskId)
{
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
SetMainCallback2(gMain.savedCallback);
FreeAllWindowBuffers();
gSaveBlock2Ptr->optionsTextSpeed = sOptionMenuPtr->option[MENUITEM_TEXTSPEED];
diff --git a/src/overworld.c b/src/overworld.c
new file mode 100644
index 000000000..e86939f10
--- /dev/null
+++ b/src/overworld.c
@@ -0,0 +1,3553 @@
+#include "global.h"
+#include "gflib.h"
+#include "bg_regs.h"
+#include "cable_club.h"
+#include "credits.h"
+#include "event_data.h"
+#include "event_object_movement.h"
+#include "event_scripts.h"
+#include "field_camera.h"
+#include "field_control_avatar.h"
+#include "field_effect.h"
+#include "field_fadetransition.h"
+#include "field_message_box.h"
+#include "field_player_avatar.h"
+#include "field_screen_effect.h"
+#include "field_specials.h"
+#include "field_tasks.h"
+#include "field_weather.h"
+#include "fieldmap.h"
+#include "fldeff.h"
+#include "heal_location.h"
+#include "help_system.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "load_save.h"
+#include "m4a.h"
+#include "map_name_popup.h"
+#include "map_preview_screen.h"
+#include "metatile_behavior.h"
+#include "money.h"
+#include "new_game.h"
+#include "new_menu_helpers.h"
+#include "overworld.h"
+#include "play_time.h"
+#include "quest_log.h"
+#include "quest_log_objects.h"
+#include "random.h"
+#include "renewable_hidden_items.h"
+#include "roamer.h"
+#include "safari_zone.h"
+#include "save_location.h"
+#include "scanline_effect.h"
+#include "script.h"
+#include "script_pokemon_util.h"
+#include "start_menu.h"
+#include "tileset_anims.h"
+#include "trainer_pokemon_sprites.h"
+#include "vs_seeker.h"
+#include "wild_encounter.h"
+#include "constants/maps.h"
+#include "constants/flags.h"
+#include "constants/species.h"
+#include "constants/region_map_sections.h"
+#include "constants/songs.h"
+
+#define PLAYER_TRADING_STATE_IDLE 0x80
+#define PLAYER_TRADING_STATE_BUSY 0x81
+#define PLAYER_TRADING_STATE_UNK_2 0x82
+#define PLAYER_TRADING_STATE_EXITING_ROOM 0x83
+
+#define FACING_NONE 0
+#define FACING_UP 1
+#define FACING_DOWN 2
+#define FACING_LEFT 3
+#define FACING_RIGHT 4
+#define FACING_FORCED_UP 7
+#define FACING_FORCED_DOWN 8
+#define FACING_FORCED_LEFT 9
+#define FACING_FORCED_RIGHT 10
+
+typedef u16 (*KeyInterCB)(u32 key);
+
+struct InitialPlayerAvatarState
+{
+ u8 transitionFlags;
+ u8 direction;
+ bool8 unk2;
+};
+
+struct TradeRoomPlayer
+{
+ u8 playerId;
+ bool8 isLocalPlayer;
+ u8 c;
+ u8 facing;
+ struct MapPosition pos;
+ u16 field_C;
+};
+
+EWRAM_DATA struct WarpData gLastUsedWarp = {};
+static EWRAM_DATA struct WarpData sWarpDestination = {};
+static EWRAM_DATA struct WarpData sFixedDiveWarp = {};
+static EWRAM_DATA struct WarpData sFixedHoleWarp = {};
+
+// File boundary perhaps?
+static EWRAM_DATA struct InitialPlayerAvatarState sInitialPlayerAvatarState = {};
+
+// File boundary perhaps?
+EWRAM_DATA bool8 gDisableMapMusicChangeOnMapLoad = FALSE;
+static EWRAM_DATA u16 sAmbientCrySpecies = SPECIES_NONE;
+static EWRAM_DATA bool8 sIsAmbientCryWaterMon = FALSE;
+
+// File boundary perhaps?
+ALIGNED(4) EWRAM_DATA bool8 gUnknown_2031DE0 = FALSE;
+static EWRAM_DATA const struct CreditsOverworldCmd *sCreditsOverworld_Script = NULL;
+static EWRAM_DATA s16 sCreditsOverworld_CmdLength = 0;
+static EWRAM_DATA s16 sCreditsOverworld_CmdIndex = 0;
+
+// File boundary perhaps?
+EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {};
+
+u16 *gBGTilemapBuffers1;
+u16 *gBGTilemapBuffers2;
+u16 *gBGTilemapBuffers3;
+void (*gFieldCallback)(void);
+bool8 (*gFieldCallback2)(void);
+u16 gHeldKeyCodeToSend;
+u8 gLocalLinkPlayerId;
+u8 gFieldLinkPlayerCount;
+
+static u8 sPlayerTradingStates[4];
+static KeyInterCB sPlayerKeyInterceptCallback;
+static bool8 gUnknown_3000E88;
+static u8 sRfuKeepAliveTimer;
+
+static u8 CountBadgesForOverworldWhiteOutLossCalculation(void);
+static void Overworld_ResetStateAfterWhitingOut(void);
+static void Overworld_SetWhiteoutRespawnPoint(void);
+static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 metatileBehavior, u8 mapType);
+static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStruct, u8 transitionFlags, u16 metatileBehavior, u8 mapType);
+static u16 GetCenterScreenMetatileBehavior(void);
+static void SetDefaultFlashLevel(void);
+static void Overworld_TryMapConnectionMusicTransition(void);
+static void ChooseAmbientCrySpecies(void);
+
+static void CB2_Overworld(void);
+static void CB2_LoadMap2(void);
+static void c2_80567AC(void);
+static void CB2_ReturnToFieldLocal(void);
+static void CB2_ReturnToFieldLink(void);
+static void FieldClearVBlankHBlankCallbacks(void);
+static void SetFieldVBlankCallback(void);
+static void VBlankCB_Field(void);
+
+static bool32 map_loading_iteration_3(u8 *state);
+static bool32 sub_8056CD8(u8 *state);
+static bool32 map_loading_iteration_2_link(u8 *state);
+static void do_load_map_stuff_loop(u8 *state);
+static void MoveSaveBlocks_ResetHeap_(void);
+static void sub_8056E80(void);
+static void sub_8056F08(void);
+static void InitOverworldGraphicsRegisters(void);
+static void sub_8057024(bool32 a0);
+static void sub_8057074(void);
+static void mli4_mapscripts_and_other(void);
+static void sub_8057100(void);
+static void sub_8057114(void);
+static void SetCameraToTrackGuestPlayer(void);
+static void SetCameraToTrackGuestPlayer_2(void);
+static void sub_8057178(void);
+static void sub_80571A8(void);
+static void CreateLinkPlayerSprites(void);
+static void sub_80572D8(void);
+static void sub_8057300(u8 *state);
+static bool32 sub_8057314(u8 *state);
+static bool32 SetUpScrollSceneForCredits(u8 *state, u8 unused);
+static bool8 MapLdr_Credits(void);
+static void CameraCB_CreditsPan(struct CameraObject * camera);
+static void Task_OvwldCredits_FadeOut(u8 taskId);
+static void Task_OvwldCredits_WaitFade(u8 taskId);
+
+static void CB1_UpdateLinkState(void);
+static void ResetAllMultiplayerState(void);
+static void ClearAllPlayerKeys(void);
+static void SetKeyInterceptCallback(KeyInterCB callback);
+static void ResetAllTradingStates(void);
+static void UpdateAllLinkPlayers(u16 *linkKeys, s32 selfId);
+static void UpdateHeldKeyCode(u16 interceptedKeys);
+static u32 GetLinkSendQueueLength(void);
+static u16 GetDirectionForDpadKey(u16 key);
+static void SetPlayerFacingDirection(u8 linkPlayerId, u8 setFacing);
+static void ResetPlayerHeldKeys(u16 *linkKeys);
+static u16 KeyInterCB_SelfIdle(u32 linkPlayerId);
+static u16 KeyInterCB_DeferToEventScript(u32 linkPlayerId);
+static u16 KeyInterCB_DeferToRecvQueue(u32 linkPlayerId);
+static u16 KeyInterCB_DeferToSendQueue(u32 linkPlayerId);
+static void LoadTradeRoomPlayer(s32 i, s32 selfId, struct TradeRoomPlayer * trainer);
+static bool32 PlayerIsAtSouthExit(struct TradeRoomPlayer * player);
+static const u8 *TryGetTileEventScript(struct TradeRoomPlayer * player);
+static const u8 *TryInteractWithPlayer(struct TradeRoomPlayer * player);
+static bool32 sub_8057FEC(struct TradeRoomPlayer * player);
+static bool32 sub_8058004(struct TradeRoomPlayer * player);
+static u16 GetDirectionForEventScript(const u8 *script);
+static void sub_80581BC(void);
+static void CreateConfirmLeaveTradeRoomPrompt(void);
+static void InitLinkRoomStartMenuScript(void);
+static void InitMenuBasedScript(const u8 *script);
+static void sub_80581DC(const u8 *script);
+static void sub_8058230(void);
+static void SpawnLinkPlayerObjectEvent(u8 i, s16 x, s16 y, u8 gender);
+static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s16 y);
+static u8 GetSpriteForLinkedPlayer(u8 linkPlayerId);
+static void GetLinkPlayerCoords(u8 linkPlayerId, u16 *x, u16 *y);
+static u8 GetLinkPlayerFacingDirection(u8 linkPlayerId);
+static u8 GetLinkPlayerElevation(u8 linkPlayerId);
+static u8 GetLinkPlayerIdAt(s16 x, s16 y);
+static void CreateLinkPlayerSprite(u8 i, u8 version);
+static u8 MovementEventModeCB_Normal(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8);
+static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8);
+static u8 MovementEventModeCB_Normal_2(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8);
+static u8 FacingHandler_DoNothing(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8);
+static u8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8);
+static u8 FacingHandler_ForcedFacingChange(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8);
+static void MovementStatusHandler_EnterFreeMode(struct LinkPlayerObjectEvent *, struct ObjectEvent *);
+static void MovementStatusHandler_TryAdvanceScript(struct LinkPlayerObjectEvent *, struct ObjectEvent *);
+static u8 FlipVerticalAndClearForced(u8 newFacing, u8 oldFacing);
+static u8 LinkPlayerDetectCollision(u8 selfObjEventId, u8 a2, s16 x, s16 y);
+static void SpriteCB_LinkPlayer(struct Sprite * sprite);
+
+extern const struct MapLayout * gMapLayouts[];
+extern const struct MapHeader *const *gMapGroups[];
+
+// Routines related to game state on warping in
+
+static const u8 sWhiteOutMoneyLossMultipliers[] = {
+ 2,
+ 4,
+ 6,
+ 9,
+ 12,
+ 16,
+ 20,
+ 25,
+ 30
+};
+
+static const u16 sWhiteOutMoneyLossBadgeFlagIDs[] = {
+ FLAG_BADGE01_GET,
+ FLAG_BADGE02_GET,
+ FLAG_BADGE03_GET,
+ FLAG_BADGE04_GET,
+ FLAG_BADGE05_GET,
+ FLAG_BADGE06_GET,
+ FLAG_BADGE07_GET,
+ FLAG_BADGE08_GET
+};
+
+static void DoWhiteOut(void)
+{
+ ScriptContext2_RunNewScript(EventScript_ResetEliteFourEnd);
+ RemoveMoney(&gSaveBlock1Ptr->money, ComputeWhiteOutMoneyLoss());
+ HealPlayerParty();
+ Overworld_ResetStateAfterWhitingOut();
+ Overworld_SetWhiteoutRespawnPoint();
+ WarpIntoMap();
+}
+
+u32 ComputeWhiteOutMoneyLoss(void)
+{
+ u8 nbadges = CountBadgesForOverworldWhiteOutLossCalculation();
+ u8 toplevel = GetPlayerPartyHighestLevel();
+ u32 losings = toplevel * 4 * sWhiteOutMoneyLossMultipliers[nbadges];
+ u32 money = GetMoney(&gSaveBlock1Ptr->money);
+ if (losings > money)
+ losings = money;
+ return losings;
+}
+
+void OverworldWhiteOutGetMoneyLoss(void)
+{
+ u32 losings = ComputeWhiteOutMoneyLoss();
+ ConvertIntToDecimalStringN(gStringVar1, losings, STR_CONV_MODE_LEFT_ALIGN, CountDigits(losings));
+}
+
+static u8 CountBadgesForOverworldWhiteOutLossCalculation(void)
+{
+ int i;
+ u8 nbadges = 0;
+ for (i = 0; i < NELEMS(sWhiteOutMoneyLossBadgeFlagIDs); i++)
+ {
+ if (FlagGet(sWhiteOutMoneyLossBadgeFlagIDs[i]))
+ nbadges++;
+ }
+ return nbadges;
+}
+
+void Overworld_ResetStateAfterFly(void)
+{
+ ResetInitialPlayerAvatarState();
+ FlagClear(FLAG_SYS_ON_CYCLING_ROAD);
+ VarSet(VAR_MAP_SCENE_ROUTE16, 0);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ FlagClear(FLAG_0x808);
+ VarSet(VAR_0x404D, 0);
+}
+
+void Overworld_ResetStateAfterTeleport(void)
+{
+ ResetInitialPlayerAvatarState();
+ FlagClear(FLAG_SYS_ON_CYCLING_ROAD);
+ VarSet(VAR_MAP_SCENE_ROUTE16, 0);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ FlagClear(FLAG_0x808);
+ VarSet(VAR_0x404D, 0);
+}
+
+void Overworld_ResetStateAfterDigEscRope(void)
+{
+ ResetInitialPlayerAvatarState();
+ FlagClear(FLAG_SYS_ON_CYCLING_ROAD);
+ VarSet(VAR_MAP_SCENE_ROUTE16, 0);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ FlagClear(FLAG_0x808);
+ VarSet(VAR_0x404D, 0);
+}
+
+static void Overworld_ResetStateAfterWhitingOut(void)
+{
+ ResetInitialPlayerAvatarState();
+ FlagClear(FLAG_SYS_ON_CYCLING_ROAD);
+ VarSet(VAR_MAP_SCENE_ROUTE16, 0);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ FlagClear(FLAG_0x808);
+ VarSet(VAR_0x404D, 0);
+}
+
+static void sub_8054E40(void)
+{
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ ChooseAmbientCrySpecies();
+ UpdateLocationHistoryForRoamer();
+ RoamerMoveToOtherLocationSet();
+}
+
+// Routines related to game stats
+
+void ResetGameStats(void)
+{
+ int i;
+
+ for (i = 0; i < NUM_GAME_STATS; i++)
+ {
+ gSaveBlock1Ptr->gameStats[i] = 0;
+ }
+}
+
+void IncrementGameStat(u8 statId)
+{
+ u32 statVal;
+ if (statId >= NUM_USED_GAME_STATS)
+ return;
+ statVal = GetGameStat(statId);
+ if (statVal < 0xFFFFFF)
+ statVal++;
+ else
+ statVal = 0xFFFFFF;
+ SetGameStat(statId, statVal);
+}
+
+u32 GetGameStat(u8 statId)
+{
+ if (statId >= NUM_USED_GAME_STATS)
+ return 0;
+ else
+ return gSaveBlock1Ptr->gameStats[statId] ^ gSaveBlock2Ptr->encryptionKey;
+}
+
+void SetGameStat(u8 statId, u32 statVal)
+{
+ if (statId >= NUM_USED_GAME_STATS)
+ return;
+ gSaveBlock1Ptr->gameStats[statId] = statVal ^ gSaveBlock2Ptr->encryptionKey;
+}
+
+void ApplyNewEncryptionKeyToGameStats(u32 newKey)
+{
+ u8 i;
+ for (i = 0; i < NUM_GAME_STATS; i++)
+ {
+ ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->gameStats[i], newKey);
+ }
+}
+
+// Routines related to object events
+
+static void sub_8054F68(void)
+{
+ u8 i, j;
+ u8 mapGroup;
+ u8 mapNum;
+ u8 localId;
+ const struct MapHeader * linkedMap;
+
+ for (i = 0, j = 0; i < gMapHeader.events->objectEventCount; i++)
+ {
+ if (gMapHeader.events->objectEvents[i].unk2 == 0xFF)
+ {
+ localId = gMapHeader.events->objectEvents[i].elevation;
+ mapNum = gMapHeader.events->objectEvents[i].trainerType;
+ mapGroup = gMapHeader.events->objectEvents[i].trainerRange_berryTreeId;
+ linkedMap = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
+ gSaveBlock1Ptr->objectEventTemplates[j] = linkedMap->events->objectEvents[localId - 1];
+ gSaveBlock1Ptr->objectEventTemplates[j].localId = gMapHeader.events->objectEvents[i].localId;
+ gSaveBlock1Ptr->objectEventTemplates[j].x = gMapHeader.events->objectEvents[i].x;
+ gSaveBlock1Ptr->objectEventTemplates[j].y = gMapHeader.events->objectEvents[i].y;
+ gSaveBlock1Ptr->objectEventTemplates[j].elevation = localId;
+ gSaveBlock1Ptr->objectEventTemplates[j].trainerType = mapNum;
+ gSaveBlock1Ptr->objectEventTemplates[j].trainerRange_berryTreeId = mapGroup;
+ gSaveBlock1Ptr->objectEventTemplates[j].unk2 = 0xFF;
+ j++;
+ }
+ else
+ {
+ gSaveBlock1Ptr->objectEventTemplates[j] = gMapHeader.events->objectEvents[i];
+ j++;
+ }
+ }
+}
+
+static void LoadSaveblockObjEventScripts(void)
+{
+ int i;
+ const struct ObjectEventTemplate * src = gMapHeader.events->objectEvents;
+ struct ObjectEventTemplate * savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
+
+ for (i = 0; i < OBJECT_EVENT_TEMPLATES_COUNT; i++)
+ {
+ savObjTemplates[i].script = src[i].script;
+ }
+}
+
+void Overworld_SetMapObjTemplateCoords(u8 localId, s16 x, s16 y)
+{
+ int i;
+ struct ObjectEventTemplate * savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
+ for (i = 0; i < OBJECT_EVENT_TEMPLATES_COUNT; i++)
+ {
+ if (savObjTemplates[i].localId == localId)
+ {
+ savObjTemplates[i].x = x;
+ savObjTemplates[i].y = y;
+ break;
+ }
+ }
+}
+
+void Overworld_SetObjEventTemplateMovementType(u8 localId, u8 movementType)
+{
+ s32 i;
+
+ struct ObjectEventTemplate *savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
+ for (i = 0; i < OBJECT_EVENT_TEMPLATES_COUNT; i++)
+ {
+ struct ObjectEventTemplate *objectEventTemplate = &savObjTemplates[i];
+ if (objectEventTemplate->localId == localId)
+ {
+ objectEventTemplate->movementType = movementType;
+ return;
+ }
+ }
+}
+
+// Routines related to the map layout
+
+static void mapdata_load_assets_to_gpu_and_full_redraw(void)
+{
+ move_tilemap_camera_to_upper_left_corner();
+ copy_map_tileset1_tileset2_to_vram(gMapHeader.mapLayout);
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ DrawWholeMapView();
+ InitTilesetAnimations();
+}
+
+static const struct MapLayout *GetMapLayout(void)
+{
+ u16 mapLayoutId = gSaveBlock1Ptr->mapLayoutId;
+ if (mapLayoutId)
+ return gMapLayouts[mapLayoutId - 1];
+ return NULL;
+}
+
+// Routines related to warps
+
+static const struct WarpData sDummyWarpData = {
+ .mapGroup = MAP_GROUP(UNDEFINED),
+ .mapNum = MAP_NUM(UNDEFINED),
+ .warpId = 0xFF,
+ .x = -1,
+ .y = -1
+};
+
+static void ApplyCurrentWarp(void)
+{
+ gLastUsedWarp = gSaveBlock1Ptr->location;
+ gSaveBlock1Ptr->location = sWarpDestination;
+ sFixedDiveWarp = sDummyWarpData;
+ sFixedHoleWarp = sDummyWarpData;
+}
+
+static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ warp->mapGroup = mapGroup;
+ warp->mapNum = mapNum;
+ warp->warpId = warpId;
+ warp->x = x;
+ warp->y = y;
+}
+
+static bool32 IsDummyWarp(struct WarpData *warp)
+{
+ if (warp->mapGroup != -1)
+ return FALSE;
+ else if (warp->mapNum != -1)
+ return FALSE;
+ else if (warp->warpId != -1)
+ return FALSE;
+ else if (warp->x != -1)
+ return FALSE;
+ else if (warp->y != -1)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+struct MapHeader const *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum)
+{
+ return gMapGroups[mapGroup][mapNum];
+}
+
+struct MapHeader const *const GetDestinationWarpMapHeader(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(sWarpDestination.mapGroup, sWarpDestination.mapNum);
+}
+
+static void LoadCurrentMapData(void)
+{
+ gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
+ gSaveBlock1Ptr->mapLayoutId = gMapHeader.mapLayoutId;
+ gMapHeader.mapLayout = GetMapLayout();
+}
+
+static void LoadSaveblockMapHeader(void)
+{
+ gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
+ gMapHeader.mapLayout = GetMapLayout();
+}
+
+static void SetPlayerCoordsFromWarp(void)
+{
+ if (gSaveBlock1Ptr->location.warpId >= 0 && gSaveBlock1Ptr->location.warpId < gMapHeader.events->warpCount)
+ {
+ gSaveBlock1Ptr->pos.x = gMapHeader.events->warps[gSaveBlock1Ptr->location.warpId].x;
+ gSaveBlock1Ptr->pos.y = gMapHeader.events->warps[gSaveBlock1Ptr->location.warpId].y;
+ }
+ else if (gSaveBlock1Ptr->location.x >= 0 && gSaveBlock1Ptr->location.y >= 0)
+ {
+ gSaveBlock1Ptr->pos.x = gSaveBlock1Ptr->location.x;
+ gSaveBlock1Ptr->pos.y = gSaveBlock1Ptr->location.y;
+ }
+ else
+ {
+ gSaveBlock1Ptr->pos.x = gMapHeader.mapLayout->width / 2;
+ gSaveBlock1Ptr->pos.y = gMapHeader.mapLayout->height / 2;
+ }
+}
+
+void WarpIntoMap(void)
+{
+ ApplyCurrentWarp();
+ LoadCurrentMapData();
+ SetPlayerCoordsFromWarp();
+}
+
+void SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&sWarpDestination, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetWarpDestinationToMapWarp(s8 mapGroup, s8 mapNum, s8 warpId)
+{
+ SetWarpDestination(mapGroup, mapNum, warpId, -1, -1);
+}
+
+void SetDynamicWarp(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId)
+{
+ SetWarpData(&gSaveBlock1Ptr->dynamicWarp, mapGroup, mapNum, warpId, gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y);
+}
+
+void SetDynamicWarpWithCoords(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&gSaveBlock1Ptr->dynamicWarp, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetWarpDestinationToDynamicWarp(u8 unusedWarpId)
+{
+ sWarpDestination = gSaveBlock1Ptr->dynamicWarp;
+}
+
+void SetWarpDestinationToHealLocation(u8 healLocationId)
+{
+ const struct HealLocation *warp = GetHealLocation(healLocationId);
+ if (warp)
+ SetWarpDestination(warp->group, warp->map, -1, warp->x, warp->y);
+}
+
+void SetWarpDestinationToLastHealLocation(void)
+{
+ sWarpDestination = gSaveBlock1Ptr->lastHealLocation;
+}
+
+static void Overworld_SetWhiteoutRespawnPoint(void)
+{
+ SetWhiteoutRespawnWarpAndHealerNpc(&sWarpDestination);
+}
+
+void SetLastHealLocationWarp(u8 healLocationId)
+{
+ const struct HealLocation *healLocation = GetHealLocation(healLocationId);
+ if (healLocation)
+ SetWarpData(&gSaveBlock1Ptr->lastHealLocation, healLocation->group, healLocation->map, -1, healLocation->x, healLocation->y);
+}
+
+void UpdateEscapeWarp(s16 x, s16 y)
+{
+ u8 currMapType = GetCurrentMapType();
+ u8 destMapType = GetMapTypeByGroupAndId(sWarpDestination.mapGroup, sWarpDestination.mapNum);
+ u8 delta;
+ if (IsMapTypeOutdoors(currMapType) && IsMapTypeOutdoors(destMapType) != TRUE && !(gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(VIRIDIAN_FOREST) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(VIRIDIAN_FOREST)))
+ {
+ delta = GetPlayerFacingDirection() != DIR_SOUTH;
+ SetEscapeWarp(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x - 7, y - 7 + delta);
+ }
+}
+
+void SetEscapeWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&gSaveBlock1Ptr->escapeWarp, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetWarpDestinationToEscapeWarp(void)
+{
+ sWarpDestination = gSaveBlock1Ptr->escapeWarp;
+}
+
+void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&sFixedDiveWarp, mapGroup, mapNum, warpId, x, y);
+}
+
+static void SetWarpDestinationToDiveWarp(void)
+{
+ sWarpDestination = sFixedDiveWarp;
+}
+
+void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&sFixedHoleWarp, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y)
+{
+ if (IsDummyWarp(&sFixedHoleWarp) == TRUE)
+ sWarpDestination = gLastUsedWarp;
+ else
+ SetWarpDestination(sFixedHoleWarp.mapGroup, sFixedHoleWarp.mapNum, -1, x, y);
+}
+
+static void SetWarpDestinationToContinueGameWarp(void)
+{
+ sWarpDestination = gSaveBlock1Ptr->continueGameWarp;
+}
+
+static void SetContinueGameWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&gSaveBlock1Ptr->continueGameWarp, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetContinueGameWarpToHealLocation(u8 healLocationId)
+{
+ const struct HealLocation *warp = GetHealLocation(healLocationId);
+ if (warp)
+ SetWarpData(&gSaveBlock1Ptr->continueGameWarp, warp->group, warp->map, -1, warp->x, warp->y);
+}
+
+void SetContinueGameWarpToDynamicWarp(int unused)
+{
+ gSaveBlock1Ptr->continueGameWarp = gSaveBlock1Ptr->dynamicWarp;
+}
+
+static const struct MapConnection * GetMapConnection(u8 dir)
+{
+ s32 i;
+ s32 count = gMapHeader.connections->count;
+ const struct MapConnection *connection = gMapHeader.connections->connections;
+
+ if (connection == NULL)
+ return NULL;
+
+ for(i = 0; i < count; i++, connection++)
+ if (connection->direction == dir)
+ return connection;
+
+ return NULL;
+}
+
+static bool8 SetDiveWarp(u8 dir, u16 x, u16 y)
+{
+ const struct MapConnection *connection = GetMapConnection(dir);
+
+ if (connection != NULL)
+ {
+ SetWarpDestination(connection->mapGroup, connection->mapNum, -1, x, y);
+ }
+ else
+ {
+ RunOnDiveWarpMapScript();
+ if (IsDummyWarp(&sFixedDiveWarp))
+ return FALSE;
+ SetWarpDestinationToDiveWarp();
+ }
+ return TRUE;
+}
+
+bool8 SetDiveWarpEmerge(u16 x, u16 y)
+{
+ return SetDiveWarp(CONNECTION_EMERGE, x, y);
+}
+
+bool8 SetDiveWarpDive(u16 x, u16 y)
+{
+ return SetDiveWarp(CONNECTION_DIVE, x, y);
+}
+
+// Map loaders
+
+void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
+{
+ int paletteIndex;
+
+ SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
+ Overworld_TryMapConnectionMusicTransition();
+ ApplyCurrentWarp();
+ LoadCurrentMapData();
+ sub_8054F68();
+ TrySetMapSaveWarpStatus();
+ ClearTempFieldEventData();
+ ResetCyclingRoadChallengeData();
+ RestartWildEncounterImmunitySteps();
+ TryUpdateRandomTrainerRematches(mapGroup, mapNum);
+ SetSav1WeatherFromCurrMapHeader();
+ ChooseAmbientCrySpecies();
+ SetDefaultFlashLevel();
+ Overworld_ClearSavedMusic();
+ RunOnTransitionMapScript();
+ TryRegenerateRenewableHiddenItems();
+ InitMap();
+ copy_map_tileset2_to_vram_2(gMapHeader.mapLayout);
+ apply_map_tileset2_palette(gMapHeader.mapLayout);
+ for (paletteIndex = 7; paletteIndex < 13; paletteIndex++)
+ ApplyWeatherGammaShiftToPal(paletteIndex);
+ InitSecondaryTilesetAnimation();
+ UpdateLocationHistoryForRoamer();
+ RoamerMove();
+ sub_8110920();
+ DoCurrentWeather();
+ ResetFieldTasksArgs();
+ RunOnResumeMapScript();
+ if (GetLastUsedWarpMapSectionId() != gMapHeader.regionMapSectionId)
+ ShowMapNamePopup(TRUE);
+}
+
+static void mli0_load_map(bool32 a1)
+{
+ bool8 isOutdoors;
+
+ LoadCurrentMapData();
+ sub_8054F68();
+ isOutdoors = IsMapTypeOutdoors(gMapHeader.mapType);
+
+ TrySetMapSaveWarpStatus();
+ ClearTempFieldEventData();
+ ResetCyclingRoadChallengeData();
+ RestartWildEncounterImmunitySteps();
+ TryUpdateRandomTrainerRematches(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
+ SetSav1WeatherFromCurrMapHeader();
+ ChooseAmbientCrySpecies();
+ if (isOutdoors)
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ SetDefaultFlashLevel();
+ Overworld_ClearSavedMusic();
+ RunOnTransitionMapScript();
+ TryRegenerateRenewableHiddenItems();
+ UpdateLocationHistoryForRoamer();
+ RoamerMoveToOtherLocationSet();
+ sub_8110920();
+ InitMap();
+}
+
+static void sub_80559A8(void)
+{
+ bool8 isOutdoors;
+
+ LoadCurrentMapData();
+ sub_8054F68();
+ isOutdoors = IsMapTypeOutdoors(gMapHeader.mapType);
+ TrySetMapSaveWarpStatus();
+ SetSav1WeatherFromCurrMapHeader();
+ ChooseAmbientCrySpecies();
+ SetDefaultFlashLevel();
+ sub_8110920();
+ sub_8111708();
+ LoadSaveblockMapHeader();
+ InitMap();
+}
+
+// Routines related to the initial player avatar state
+
+void ResetInitialPlayerAvatarState(void)
+{
+ sInitialPlayerAvatarState.direction = DIR_SOUTH;
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
+ sInitialPlayerAvatarState.unk2 = FALSE;
+}
+
+static void SetInitialPlayerAvatarStateWithDirection(u8 dirn)
+{
+ sInitialPlayerAvatarState.direction = dirn;
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
+ sInitialPlayerAvatarState.unk2 = TRUE;
+}
+
+void StoreInitialPlayerAvatarState(void)
+{
+ sInitialPlayerAvatarState.direction = GetPlayerFacingDirection();
+
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE))
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_MACH_BIKE;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ACRO_BIKE;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_SURFING;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_UNDERWATER))
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_UNDERWATER;
+ else
+ sInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
+ sInitialPlayerAvatarState.unk2 = FALSE;
+}
+
+struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void)
+{
+ struct InitialPlayerAvatarState playerStruct;
+ u8 mapType = GetCurrentMapType();
+ u16 metatileBehavior = GetCenterScreenMetatileBehavior();
+ u8 transitionFlags = GetAdjustedInitialTransitionFlags(&sInitialPlayerAvatarState, metatileBehavior, mapType);
+ playerStruct.transitionFlags = transitionFlags;
+ playerStruct.direction = GetAdjustedInitialDirection(&sInitialPlayerAvatarState, transitionFlags, metatileBehavior, mapType);
+ playerStruct.unk2 = FALSE;
+ sInitialPlayerAvatarState = playerStruct;
+ return &sInitialPlayerAvatarState;
+}
+
+static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 metatileBehavior, u8 mapType)
+{
+ if (mapType != MAP_TYPE_INDOOR && FlagGet(FLAG_SYS_CRUISE_MODE))
+ return PLAYER_AVATAR_FLAG_ON_FOOT;
+ else if (mapType == MAP_TYPE_UNDERWATER)
+ return PLAYER_AVATAR_FLAG_UNDERWATER;
+ else if (sub_8055B38(metatileBehavior) == TRUE)
+ return PLAYER_AVATAR_FLAG_ON_FOOT;
+ else if (MetatileBehavior_IsSurfable(metatileBehavior) == TRUE)
+ return PLAYER_AVATAR_FLAG_SURFING;
+ else if (Overworld_IsBikingAllowed() != TRUE)
+ return PLAYER_AVATAR_FLAG_ON_FOOT;
+ else if (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_MACH_BIKE)
+ return PLAYER_AVATAR_FLAG_MACH_BIKE;
+ else if (playerStruct->transitionFlags != PLAYER_AVATAR_FLAG_ACRO_BIKE)
+ return PLAYER_AVATAR_FLAG_ON_FOOT;
+ else
+ return PLAYER_AVATAR_FLAG_ACRO_BIKE;
+}
+
+bool8 sub_8055B38(u16 metatileBehavior)
+{
+ if (MetatileBehavior_IsSurfable(metatileBehavior) != TRUE)
+ return FALSE;
+ if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEAFOAM_ISLANDS_B3F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEAFOAM_ISLANDS_B3F)) || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEAFOAM_ISLANDS_B4F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEAFOAM_ISLANDS_B4F)))
+ return TRUE;
+ return FALSE;
+}
+
+static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStruct, u8 transitionFlags, u16 metatileBehavior, u8 mapType)
+{
+ if (FlagGet(FLAG_SYS_CRUISE_MODE) && mapType == MAP_TYPE_OCEAN_ROUTE)
+ return DIR_EAST;
+ else if (MetatileBehavior_IsDeepSouthWarp(metatileBehavior) == TRUE)
+ return DIR_NORTH;
+ else if (MetatileBehavior_IsNonAnimDoor(metatileBehavior) == TRUE || MetatileBehavior_IsWarpDoor_2(metatileBehavior) == TRUE)
+ return DIR_SOUTH;
+ else if (MetatileBehavior_IsSouthArrowWarp(metatileBehavior) == TRUE)
+ return DIR_NORTH;
+ else if (MetatileBehavior_IsNorthArrowWarp(metatileBehavior) == TRUE)
+ return DIR_SOUTH;
+ else if (MetatileBehavior_IsWestArrowWarp(metatileBehavior) == TRUE)
+ return DIR_EAST;
+ else if (MetatileBehavior_IsEastArrowWarp(metatileBehavior) == TRUE)
+ return DIR_WEST;
+ else if (MetatileBehavior_IsUnknownWarp6C(metatileBehavior) == TRUE || MetatileBehavior_IsUnknownWarp6E(metatileBehavior) == TRUE)
+ return DIR_WEST;
+ else if (MetatileBehavior_IsUnknownWarp6D(metatileBehavior) == TRUE || MetatileBehavior_IsUnknownWarp6F(metatileBehavior) == TRUE)
+ return DIR_EAST;
+ else if ((playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER && transitionFlags == PLAYER_AVATAR_FLAG_SURFING)
+ || (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER ))
+ return playerStruct->direction;
+ else if (MetatileBehavior_IsLadder(metatileBehavior) == TRUE)
+ return playerStruct->direction;
+ else if (playerStruct->unk2)
+ return playerStruct->direction;
+ else
+ return DIR_SOUTH;
+}
+
+static u16 GetCenterScreenMetatileBehavior(void)
+{
+ return MapGridGetMetatileBehaviorAt(gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7);
+}
+
+// Routines related to flash level and map perms
+
+bool32 Overworld_IsBikingAllowed(void)
+{
+ if (!gMapHeader.bikingAllowed)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static void SetDefaultFlashLevel(void)
+{
+ if (!gMapHeader.cave)
+ gSaveBlock1Ptr->flashLevel = 0;
+ else if (FlagGet(FLAG_SYS_FLASH_ACTIVE))
+ gSaveBlock1Ptr->flashLevel = 0;
+ else
+ gSaveBlock1Ptr->flashLevel = gMaxFlashLevel;
+}
+
+void Overworld_SetFlashLevel(s32 flashLevel)
+{
+ if (flashLevel < 0 || flashLevel > gMaxFlashLevel)
+ flashLevel = 0;
+ gSaveBlock1Ptr->flashLevel = flashLevel;
+}
+
+u8 Overworld_GetFlashLevel(void)
+{
+ return gSaveBlock1Ptr->flashLevel;
+}
+
+void SetCurrentMapLayout(u16 mapLayoutId)
+{
+ gSaveBlock1Ptr->mapLayoutId = mapLayoutId;
+ gMapHeader.mapLayout = GetMapLayout();
+}
+
+void sub_8055D5C(struct WarpData * warp)
+{
+ sWarpDestination = *warp;
+}
+
+// Routines related to map music
+
+static u16 GetLocationMusic(struct WarpData * warp)
+{
+ return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music;
+}
+
+static u16 GetCurrLocationDefaultMusic(void)
+{
+ u16 music;
+ music = GetLocationMusic(&gSaveBlock1Ptr->location);
+ return music;
+}
+
+static u16 GetWarpDestinationMusic(void)
+{
+ u16 music = GetLocationMusic(&sWarpDestination);
+ return music;
+}
+
+void Overworld_ResetMapMusic(void)
+{
+ ResetMapMusic();
+}
+
+void Overworld_PlaySpecialMapMusic(void)
+{
+ u16 music;
+ s16 x, y;
+
+ if (gDisableMapMusicChangeOnMapLoad == 1)
+ {
+ StopMapMusic();
+ return;
+ }
+ if (gDisableMapMusicChangeOnMapLoad == 2)
+ {
+ return;
+ }
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(POKEMON_LEAGUE_CHAMPIONS_ROOM) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(POKEMON_LEAGUE_CHAMPIONS_ROOM))
+ {
+ PlayerGetDestCoords(&x, &y);
+ if (y - 7 < 11 && gMPlayInfo_BGM.songHeader == &mus_win_gym)
+ {
+ FadeInBGM(4);
+ return;
+ }
+ }
+
+ music = GetCurrLocationDefaultMusic();
+
+ if (gSaveBlock1Ptr->savedMusic)
+ music = gSaveBlock1Ptr->savedMusic;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) &&sub_8056124(MUS_NAMINORI))
+ music = MUS_NAMINORI;
+
+ if (music != GetCurrentMapMusic())
+ PlayNewMapMusic(music);
+}
+
+void Overworld_SetSavedMusic(u16 songNum)
+{
+ gSaveBlock1Ptr->savedMusic = songNum;
+}
+
+void Overworld_ClearSavedMusic(void)
+{
+ gSaveBlock1Ptr->savedMusic = 0;
+}
+
+static void Overworld_TryMapConnectionMusicTransition(void)
+{
+ u16 newMusic;
+ u16 currentMusic;
+
+ if (gDisableMapMusicChangeOnMapLoad == 1)
+ {
+ StopMapMusic();
+ return;
+ }
+ if (gDisableMapMusicChangeOnMapLoad == 2)
+ {
+ return;
+ }
+
+ if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE)
+ {
+ newMusic = GetWarpDestinationMusic();
+ currentMusic = GetCurrentMapMusic();
+ if (currentMusic == MUS_NAMINORI)
+ return;
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && sub_8056124(MUS_NAMINORI))
+ newMusic = MUS_NAMINORI;
+ if (newMusic != currentMusic)
+ {
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ FadeOutAndFadeInNewMapMusic(newMusic, 4, 4);
+ else
+ FadeOutAndPlayNewMapMusic(newMusic, 8);
+ }
+ }
+}
+
+void Overworld_ChangeMusicToDefault(void)
+{
+ u16 currentMusic = GetCurrentMapMusic();
+ if (currentMusic != GetCurrLocationDefaultMusic())
+ FadeOutAndPlayNewMapMusic(GetCurrLocationDefaultMusic(), 8);
+}
+
+void Overworld_ChangeMusicTo(u16 newMusic)
+{
+ u16 currentMusic = GetCurrentMapMusic();
+ if (currentMusic != newMusic)
+ FadeOutAndPlayNewMapMusic(newMusic, 8);
+}
+
+static u8 GetMapMusicFadeoutSpeed(void)
+{
+ const struct MapHeader *mapHeader = GetDestinationWarpMapHeader();
+ if (IsMapTypeIndoors(mapHeader->mapType) == TRUE)
+ return 2;
+ else
+ return 4;
+}
+
+void TryFadeOutOldMapMusic(void)
+{
+ u16 warpMusic = GetWarpDestinationMusic();
+ if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE && warpMusic != GetCurrentMapMusic())
+ {
+ FadeOutMapMusic(GetMapMusicFadeoutSpeed());
+ }
+}
+
+bool8 BGMusicStopped(void)
+{
+ return IsNotWaitingForBGMStop();
+}
+
+void Overworld_FadeOutMapMusic(void)
+{
+ FadeOutMapMusic(4);
+}
+
+static void PlayAmbientCry(void)
+{
+ s16 x, y;
+ s8 pan;
+ s8 volume;
+
+ PlayerGetDestCoords(&x, &y);
+ if (sIsAmbientCryWaterMon == TRUE
+ && !MetatileBehavior_IsSurfable(MapGridGetMetatileBehaviorAt(x, y)))
+ return;
+ pan = (Random() % 88) + 212;
+ volume = (Random() % 30) + 50;
+
+ if (gDisableMapMusicChangeOnMapLoad == 1)
+ {
+ StopMapMusic();
+ return;
+ }
+ if (gDisableMapMusicChangeOnMapLoad == 2)
+ {
+ return;
+ }
+
+ PlayCry2(sAmbientCrySpecies, pan, volume, 1);
+}
+
+void UpdateAmbientCry(s16 *state, u16 *delayCounter)
+{
+ u8 i, monsCount, divBy;
+
+ switch (*state)
+ {
+ case 0:
+ if (sAmbientCrySpecies == SPECIES_NONE)
+ *state = 4;
+ else
+ *state = 1;
+ break;
+ case 1:
+ *delayCounter = (Random() % 2400) + 1200;
+ *state = 3;
+ break;
+ case 2:
+ *delayCounter = (Random() % 1200) + 1200;
+ *state = 3;
+ break;
+ case 3:
+ (*delayCounter)--;
+ if (*delayCounter == 0)
+ {
+ PlayAmbientCry();
+ *state = 2;
+ }
+ break;
+ case 4:
+ break;
+ }
+}
+
+static void ChooseAmbientCrySpecies(void)
+{
+ sAmbientCrySpecies = GetLocalWildMon(&sIsAmbientCryWaterMon);
+}
+
+bool32 sub_8056124(u16 music)
+{
+ if (music == MUS_CYCLING || music == MUS_NAMINORI)
+ {
+ if (gMapHeader.regionMapSectionId == MAPSEC_KANTO_VICTORY_ROAD || gMapHeader.regionMapSectionId == MAPSEC_ROUTE_23 || gMapHeader.regionMapSectionId == MAPSEC_INDIGO_PLATEAU)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum)
+{
+ return Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->mapType;
+}
+
+static u8 GetMapTypeByWarpData(struct WarpData *warp)
+{
+ return GetMapTypeByGroupAndId(warp->mapGroup, warp->mapNum);
+}
+
+u8 GetCurrentMapType(void)
+{
+ return GetMapTypeByWarpData(&gSaveBlock1Ptr->location);
+}
+
+u8 GetLastUsedWarpMapType(void)
+{
+ return GetMapTypeByWarpData(&gLastUsedWarp);
+}
+
+u8 GetLastUsedWarpMapSectionId(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(gLastUsedWarp.mapGroup, gLastUsedWarp.mapNum)->regionMapSectionId;
+}
+
+bool8 IsMapTypeOutdoors(u8 mapType)
+{
+ if (mapType == MAP_TYPE_ROUTE
+ || mapType == MAP_TYPE_TOWN
+ || mapType == MAP_TYPE_UNDERWATER
+ || mapType == MAP_TYPE_CITY
+ || mapType == MAP_TYPE_OCEAN_ROUTE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType)
+{
+ if (mapType == MAP_TYPE_ROUTE
+ || mapType == MAP_TYPE_TOWN
+ || mapType == MAP_TYPE_OCEAN_ROUTE
+ || mapType == MAP_TYPE_CITY)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 IsMapTypeIndoors(u8 mapType)
+{
+ if (mapType == MAP_TYPE_INDOOR
+ || mapType == MAP_TYPE_SECRET_BASE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static u8 GetSavedWarpRegionMapSectionId(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->dynamicWarp.mapGroup, gSaveBlock1Ptr->dynamicWarp.mapNum)->regionMapSectionId;
+}
+
+u8 GetCurrentRegionMapSectionId(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->regionMapSectionId;
+}
+
+u8 GetCurrentMapBattleScene(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->battleType;
+}
+
+static const int sUnusedData[] = {
+ 1200,
+ 3600,
+ 1200,
+ 2400,
+ 50,
+ 80,
+ -44,
+ 44
+};
+
+const struct UCoords32 gDirectionToVectors[] = {
+ { 0u, 0u},
+ { 0u, 1u},
+ { 0u, -1u},
+ {-1u, 0u},
+ { 1u, 0u},
+ {-1u, 1u},
+ { 1u, 1u},
+ {-1u, -1u},
+ { 1u, -1u},
+};
+
+static const struct BgTemplate sOverworldBgTemplates[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0x000
+ }, {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 29,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0x000
+ }, {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 28,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0x000
+ }, {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0x000
+ }
+};
+
+static void InitOverworldBgs(void)
+{
+ MoveSaveBlocks_ResetHeap_();
+ sub_8056E80();
+ ResetBgsAndClearDma3BusyFlags(FALSE);
+ InitBgsFromTemplates(0, sOverworldBgTemplates, NELEMS(sOverworldBgTemplates));
+ SetBgAttribute(1, BG_ATTR_MOSAIC, TRUE);
+ SetBgAttribute(2, BG_ATTR_MOSAIC, TRUE);
+ SetBgAttribute(3, BG_ATTR_MOSAIC, TRUE);
+ gBGTilemapBuffers2 = AllocZeroed(BG_SCREEN_SIZE);
+ gBGTilemapBuffers1 = AllocZeroed(BG_SCREEN_SIZE);
+ gBGTilemapBuffers3 = AllocZeroed(BG_SCREEN_SIZE);
+ SetBgTilemapBuffer(1, gBGTilemapBuffers2);
+ SetBgTilemapBuffer(2, gBGTilemapBuffers1);
+ SetBgTilemapBuffer(3, gBGTilemapBuffers3);
+ InitStandardTextBoxWindows();
+ ResetBg0();
+ sub_8069348();
+}
+
+static void InitOverworldBgs_NoResetHeap(void)
+{
+ ResetBgsAndClearDma3BusyFlags(FALSE);
+ InitBgsFromTemplates(0, sOverworldBgTemplates, NELEMS(sOverworldBgTemplates));
+ SetBgAttribute(1, BG_ATTR_MOSAIC, TRUE);
+ SetBgAttribute(2, BG_ATTR_MOSAIC, TRUE);
+ SetBgAttribute(3, BG_ATTR_MOSAIC, TRUE);
+ gBGTilemapBuffers2 = AllocZeroed(BG_SCREEN_SIZE);
+ gBGTilemapBuffers1 = AllocZeroed(BG_SCREEN_SIZE);
+ gBGTilemapBuffers3 = AllocZeroed(BG_SCREEN_SIZE);
+ SetBgTilemapBuffer(1, gBGTilemapBuffers2);
+ SetBgTilemapBuffer(2, gBGTilemapBuffers1);
+ SetBgTilemapBuffer(3, gBGTilemapBuffers3);
+ InitStandardTextBoxWindows();
+ ResetBg0();
+ sub_8069348();
+}
+
+void CleanupOverworldWindowsAndTilemaps(void)
+{
+ FreeAllOverworldWindowBuffers();
+ Free(gBGTilemapBuffers3);
+ Free(gBGTilemapBuffers1);
+ Free(gBGTilemapBuffers2);
+}
+
+static void ResetSafariZoneFlag_(void)
+{
+ ResetSafariZoneFlag();
+}
+
+bool32 IsUpdateLinkStateCBActive(void)
+{
+ if (gMain.callback1 == CB1_UpdateLinkState)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
+{
+ struct FieldInput fieldInput;
+
+ sub_8112B3C();
+ sub_805BEB8();
+ FieldClearPlayerInput(&fieldInput);
+ FieldGetPlayerInput(&fieldInput, newKeys, heldKeys);
+ FieldInput_HandleCancelSignpost(&fieldInput);
+ if (!ScriptContext2_IsEnabled())
+ {
+ if (ProcessPlayerFieldInput(&fieldInput) == TRUE)
+ {
+ if (gUnknown_3005E88 == 2)
+ sub_81127F8(&gInputToStoreInQuestLogMaybe);
+ ScriptContext2_Enable();
+ DismissMapNamePopup();
+ }
+ else
+ {
+ player_step(fieldInput.dpadDirection, newKeys, heldKeys);
+ }
+ }
+ RunQuestLogCB();
+}
+
+static void DoCB1_Overworld_QuestLogPlayback(void)
+{
+ struct FieldInput fieldInput;
+
+ sub_8112B3C();
+ sub_805BEB8();
+ sub_8111C68();
+ FieldClearPlayerInput(&fieldInput);
+ fieldInput = gUnknown_3005E90;
+ FieldInput_HandleCancelSignpost(&fieldInput);
+ if (!ScriptContext2_IsEnabled())
+ {
+ if (ProcessPlayerFieldInput(&fieldInput) == TRUE)
+ {
+ ScriptContext2_Enable();
+ DismissMapNamePopup();
+ }
+ else
+ {
+ RunQuestLogCB();
+ }
+ }
+ else if (sub_8111CD0() == TRUE)
+ {
+ RunQuestLogCB();
+ }
+ FieldClearPlayerInput(&gUnknown_3005E90);
+}
+
+void CB1_Overworld(void)
+{
+ if (gMain.callback2 == CB2_Overworld)
+ {
+ if (sub_8112CAC() == TRUE || gQuestLogState == QL_STATE_2)
+ DoCB1_Overworld_QuestLogPlayback();
+ else
+ DoCB1_Overworld(gMain.newKeys, gMain.heldKeys);
+ }
+}
+
+static void OverworldBasic(void)
+{
+ ScriptContext2_RunScript();
+ RunTasks();
+ AnimateSprites();
+ CameraUpdate();
+ sub_8115798();
+ UpdateCameraPanning();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ UpdateTilesetAnimations();
+ DoScheduledBgTilemapCopiesToVram();
+}
+
+// This CB2 is used when starting
+void CB2_OverworldBasic(void)
+{
+ OverworldBasic();
+}
+
+static void CB2_Overworld(void)
+{
+ bool32 fading = !!gPaletteFade.active;
+ if (fading)
+ SetVBlankCallback(NULL);
+ OverworldBasic();
+ if (fading)
+ SetFieldVBlankCallback();
+}
+
+void SetMainCallback1(MainCallback cb)
+{
+ gMain.callback1 = cb;
+}
+
+static bool8 map_post_load_hook_exec(void)
+{
+ if (gFieldCallback2)
+ {
+ if (!gFieldCallback2())
+ {
+ return FALSE;
+ }
+ else
+ {
+ gFieldCallback2 = NULL;
+ gFieldCallback = NULL;
+ }
+ }
+ else
+ {
+ if (gFieldCallback)
+ gFieldCallback();
+ else
+ FieldCB_DefaultWarpExit();
+
+ gFieldCallback = NULL;
+ }
+
+ return TRUE;
+}
+
+void CB2_NewGame(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ ResetSafariZoneFlag_();
+ NewGameInitData();
+ ResetInitialPlayerAvatarState();
+ PlayTimeCounter_Start();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ gFieldCallback = FieldCB_WarpExitFadeFromBlack;
+ gFieldCallback2 = NULL;
+ do_load_map_stuff_loop(&gMain.state);
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_Overworld);
+ SetMainCallback2(CB2_Overworld);
+}
+
+void CB2_WhiteOut(void)
+{
+ u8 val;
+
+ if (++gMain.state >= 120)
+ {
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ ResetSafariZoneFlag_();
+ DoWhiteOut();
+ SetInitialPlayerAvatarStateWithDirection(DIR_NORTH);
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ gFieldCallback = FieldCB_RushInjuredPokemonToCenter;
+ val = 0;
+ do_load_map_stuff_loop(&val);
+ sub_8112364();
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_Overworld);
+ SetMainCallback2(CB2_Overworld);
+ }
+}
+
+void CB2_LoadMap(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ SetMainCallback1(NULL);
+ SetMainCallback2(CB2_DoChangeMap);
+ gMain.savedCallback = CB2_LoadMap2;
+}
+
+static void CB2_LoadMap2(void)
+{
+ do_load_map_stuff_loop(&gMain.state);
+ if (sub_8113748() == TRUE)
+ {
+ sub_81119C8();
+ }
+ else
+ {
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_Overworld);
+ SetMainCallback2(CB2_Overworld);
+ }
+}
+
+void CB2_ReturnToFieldCableClub(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback = FieldCB_ReturnToFieldWirelessLink;
+ SetMainCallback2(c2_80567AC);
+}
+
+static void c2_80567AC(void)
+{
+ if (map_loading_iteration_3(&gMain.state))
+ {
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_UpdateLinkState);
+ ResetAllMultiplayerState();
+ SetMainCallback2(CB2_Overworld);
+ }
+}
+
+void CB2_ReturnToField(void)
+{
+ if (IsUpdateLinkStateCBActive() == TRUE)
+ {
+ SetMainCallback2(CB2_ReturnToFieldLink);
+ }
+ else
+ {
+ FieldClearVBlankHBlankCallbacks();
+ SetMainCallback2(CB2_ReturnToFieldLocal);
+ }
+}
+
+static void CB2_ReturnToFieldLocal(void)
+{
+ if (sub_8056CD8(&gMain.state))
+ {
+ SetFieldVBlankCallback();
+ SetMainCallback2(CB2_Overworld);
+ }
+}
+
+static void CB2_ReturnToFieldLink(void)
+{
+ if (!sub_8058244() && map_loading_iteration_2_link(&gMain.state))
+ SetMainCallback2(CB2_Overworld);
+}
+
+void CB2_ReturnToFieldFromMultiplayer(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ SetMainCallback1(CB1_UpdateLinkState);
+ ResetAllMultiplayerState();
+
+ if (gWirelessCommType != 0)
+ gFieldCallback = FieldCB_ReturnToFieldWirelessLink;
+ else
+ gFieldCallback = FieldCB_ReturnToFieldCableLink;
+
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ CB2_ReturnToField();
+}
+
+void CB2_ReturnToFieldWithOpenMenu(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback2 = FieldCB_ReturnToFieldOpenStartMenu;
+ CB2_ReturnToField();
+}
+
+void CB2_ReturnToFieldContinueScript(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback = FieldCB_ContinueScript;
+ CB2_ReturnToField();
+}
+
+void CB2_ReturnToFieldContinueScriptPlayMapMusic(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
+ CB2_ReturnToField();
+}
+
+void sub_80568FC(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback = FieldCB_WarpExitFadeFromBlack;
+ CB2_ReturnToField();
+}
+
+static void sub_8056918(void)
+{
+ if (SHOW_MAP_NAME_ENABLED)
+ ShowMapNamePopup(FALSE);
+ FieldCB_WarpExitFadeFromBlack();
+}
+
+void CB2_ContinueSavedGame(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ ResetSafariZoneFlag_();
+ LoadSaveblockMapHeader();
+ LoadSaveblockObjEventScripts();
+ UnfreezeObjectEvents();
+ sub_8054E40();
+ InitMapFromSavedGame();
+ PlayTimeCounter_Start();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ gFieldCallback2 = NULL;
+ gUnknown_2031DE0 = TRUE;
+ if (UseContinueGameWarp() == TRUE)
+ {
+ ClearContinueGameWarpStatus();
+ SetWarpDestinationToContinueGameWarp();
+ WarpIntoMap();
+ SetMainCallback2(CB2_LoadMap);
+ }
+ else
+ {
+ gFieldCallback = sub_8056918;
+ SetMainCallback1(CB1_Overworld);
+ CB2_ReturnToField();
+ }
+}
+
+static void FieldClearVBlankHBlankCallbacks(void)
+{
+ if (UsedPokemonCenterWarp() == TRUE)
+ CloseLink();
+
+ if (gWirelessCommType != 0)
+ {
+ EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
+ DisableInterrupts(INTR_FLAG_HBLANK);
+ }
+ else
+ {
+ DisableInterrupts(INTR_FLAG_HBLANK);
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ }
+
+ SetVBlankCallback(NULL);
+ SetHBlankCallback(NULL);
+}
+
+static void SetFieldVBlankCallback(void)
+{
+ SetVBlankCallback(VBlankCB_Field);
+}
+
+static void VBlankCB_Field(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ ScanlineEffect_InitHBlankDmaTransfer();
+ FieldUpdateBgTilemapScroll();
+ TransferPlttBuffer();
+ TransferTilesetAnimsBuffer();
+}
+
+static void InitCurrentFlashLevelScanlineEffect(void)
+{
+ u8 flashLevel = Overworld_GetFlashLevel();
+ if (flashLevel != 0)
+ {
+ WriteFlashScanlineEffectBuffer(flashLevel);
+ ScanlineEffect_SetParams((struct ScanlineEffectParams){
+ .dmaDest = &REG_WIN0H,
+ .dmaControl = (2 >> 1) | ((DMA_16BIT | DMA_DEST_RELOAD | DMA_SRC_INC | DMA_REPEAT | DMA_START_HBLANK | DMA_ENABLE) << 16),
+ .initState = 1,
+ .unused9 = 0
+ });
+ }
+}
+
+static bool32 map_loading_iteration_3(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ InitOverworldBgs();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ (*state)++;
+ break;
+ case 1:
+ mli0_load_map(TRUE);
+ (*state)++;
+ break;
+ case 2:
+ sub_8057024(TRUE);
+ (*state)++;
+ break;
+ case 3:
+ sub_8057178();
+ sub_8057074();
+ sub_80571A8();
+ SetCameraToTrackGuestPlayer();
+ SetHelpContextForMap();
+ (*state)++;
+ break;
+ case 4:
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
+ (*state)++;
+ break;
+ case 5:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 6:
+ copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 7:
+ copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 8:
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
+ }
+ break;
+ case 9:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 10:
+ InitTilesetAnimations();
+ (*state)++;
+ break;
+ case 11:
+ if (gWirelessCommType != 0)
+ {
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ }
+ (*state)++;
+ break;
+ case 12:
+ if (map_post_load_hook_exec())
+ (*state)++;
+ break;
+ case 13:
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool32 load_map_stuff(u8 *state, bool32 a1)
+{
+ switch (*state)
+ {
+ case 0:
+ InitOverworldBgs();
+ FieldClearVBlankHBlankCallbacks();
+ mli0_load_map(a1);
+ (*state)++;
+ break;
+ case 1:
+ sub_8111F14();
+ (*state)++;
+ break;
+ case 2:
+ sub_8057024(a1);
+ (*state)++;
+ break;
+ case 3:
+ if (sub_8113748() == TRUE)
+ return TRUE;
+ (*state)++;
+ break;
+ case 4:
+ mli4_mapscripts_and_other();
+ sub_8057114();
+ if (gQuestLogState != QL_STATE_2)
+ {
+ sub_80CC534();
+ sub_80CC59C();
+ }
+ SetHelpContextForMap();
+ (*state)++;
+ break;
+ case 5:
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
+ (*state)++;
+ break;
+ case 6:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 7:
+ copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 8:
+ copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 9:
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
+ }
+ break;
+ case 10:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 11:
+ InitTilesetAnimations();
+ (*state)++;
+ break;
+ case 12:
+ if (GetLastUsedWarpMapSectionId() != gMapHeader.regionMapSectionId && MapHasPreviewScreen_HandleQLState2(gMapHeader.regionMapSectionId, MPS_TYPE_FOREST) == TRUE)
+ {
+ MapPreview_LoadGfx(gMapHeader.regionMapSectionId);
+ MapPreview_StartForestTransition(gMapHeader.regionMapSectionId);
+ }
+ else if (SHOW_MAP_NAME_ENABLED)
+ {
+ ShowMapNamePopup(FALSE);
+ }
+ (*state)++;
+ break;
+ case 13:
+ if (map_post_load_hook_exec())
+ (*state)++;
+ break;
+ case 14:
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool32 sub_8056CD8(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ InitOverworldBgs();
+ sub_8111F14();
+ sub_8057024(FALSE);
+ sub_8057100();
+ sub_8057114();
+ (*state)++;
+ break;
+ case 1:
+ (*state)++;
+ break;
+ case 2:
+ sub_8056F08();
+ SetHelpContextForMap();
+ (*state)++;
+ break;
+ case 3:
+ if (map_post_load_hook_exec())
+ (*state)++;
+ break;
+ case 4:
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool32 map_loading_iteration_2_link(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ InitOverworldBgs();
+ FieldClearVBlankHBlankCallbacks();
+ (*state)++;
+ break;
+ case 1:
+ sub_8111F14();
+ sub_8057024(1);
+ (*state)++;
+ break;
+ case 2:
+ CreateLinkPlayerSprites();
+ sub_8057100();
+ SetCameraToTrackGuestPlayer_2();
+ SetHelpContextForMap();
+ (*state)++;
+ break;
+ case 3:
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
+ (*state)++;
+ break;
+ case 4:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 5:
+ copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 6:
+ copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 7:
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
+ }
+ break;
+ case 8:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 9:
+ InitTilesetAnimations();
+ (*state)++;
+ break;
+ case 10:
+ (*state)++;
+ break;
+ case 11:
+ if (gWirelessCommType != 0)
+ {
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ }
+ (*state)++;
+ break;
+ case 12:
+ if (map_post_load_hook_exec())
+ (*state)++;
+ break;
+ case 13:
+ SetFieldVBlankCallback();
+ (*state)++;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void do_load_map_stuff_loop(u8 *state)
+{
+ while (!load_map_stuff(state, FALSE))
+ ;
+}
+
+static void MoveSaveBlocks_ResetHeap_(void)
+{
+ MoveSaveBlocks_ResetHeap();
+}
+
+static void sub_8056E80(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ ScanlineEffect_Stop();
+
+ DmaClear16(3, PLTT + 2, PLTT_SIZE - 2);
+ DmaFillLarge16(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
+ ResetOamRange(0, 128);
+ LoadOam();
+}
+
+static void sub_8056F08(void)
+{
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
+ mapdata_load_assets_to_gpu_and_full_redraw();
+}
+
+static void InitOverworldGraphicsRegisters(void)
+{
+ ClearScheduledBgCopiesToVram();
+ ResetTempTileDataBuffers();
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WINOBJ_BG0);
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 255));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 255));
+ SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(255, 255));
+ SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(255, 255));
+ SetGpuReg(REG_OFFSET_BLDCNT, gOverworldBackgroundLayerFlags[1] | gOverworldBackgroundLayerFlags[2] | gOverworldBackgroundLayerFlags[3]
+ | BLDCNT_TGT2_OBJ | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(13, 7));
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
+ ScheduleBgCopyTilemapToVram(3);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | 0x20 | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+}
+
+static void sub_8057024(u32 a1)
+{
+ ResetTasks();
+ ResetSpriteData();
+ ResetPaletteFade();
+ ScanlineEffect_Clear();
+ ResetAllPicSprites();
+ ResetCameraUpdateInfo();
+ InstallCameraPanAheadCallback();
+ if (!a1)
+ InitObjectEventPalettes(0);
+ else
+ InitObjectEventPalettes(1);
+
+ FieldEffectActiveListClear();
+ StartWeather();
+ ResumePausedWeather();
+ if (!a1)
+ SetUpFieldTasks();
+ RunOnResumeMapScript();
+}
+
+static void sub_8057074(void)
+{
+ gTotalCameraPixelOffsetX = 0;
+ gTotalCameraPixelOffsetY = 0;
+ ResetObjectEvents();
+ TrySpawnObjectEvents(0, 0);
+ TryRunOnWarpIntoMapScript();
+}
+
+static void mli4_mapscripts_and_other(void)
+{
+ s16 x, y;
+ struct InitialPlayerAvatarState *player;
+
+ gTotalCameraPixelOffsetX = 0;
+ gTotalCameraPixelOffsetY = 0;
+ ResetObjectEvents();
+ GetCameraFocusCoords(&x, &y);
+ player = GetInitialPlayerAvatarState();
+ InitPlayerAvatar(x, y, player->direction, gSaveBlock2Ptr->playerGender);
+ SetPlayerAvatarTransitionFlags(player->transitionFlags);
+ ResetInitialPlayerAvatarState();
+ TrySpawnObjectEvents(0, 0);
+ TryRunOnWarpIntoMapScript();
+}
+
+static void sub_8057100(void)
+{
+ sub_805EDF0(0, 0);
+ RunOnReturnToFieldMapScript();
+}
+
+static void sub_8057114(void)
+{
+ gObjectEvents[gPlayerAvatar.objectEventId].trackedByCamera = TRUE;
+ InitCameraUpdateCallback(gPlayerAvatar.spriteId);
+}
+
+static void SetCameraToTrackGuestPlayer(void)
+{
+ InitCameraUpdateCallback(GetSpriteForLinkedPlayer(gLocalLinkPlayerId));
+}
+
+// Duplicate function.
+static void SetCameraToTrackGuestPlayer_2(void)
+{
+ InitCameraUpdateCallback(GetSpriteForLinkedPlayer(gLocalLinkPlayerId));
+}
+
+static void sub_8057178(void)
+{
+ u16 x, y;
+ GetCameraFocusCoords(&x, &y);
+
+ // This is a hack of some kind; it's undone in sub_8086B14, which is called
+ // soon after this function.
+ SetCameraFocusCoords(x + gLocalLinkPlayerId, y);
+}
+
+static void sub_80571A8(void)
+{
+ u16 i;
+ u16 x, y;
+
+ GetCameraFocusCoords(&x, &y);
+ x -= gLocalLinkPlayerId;
+
+ for (i = 0; i < gFieldLinkPlayerCount; i++)
+ {
+ SpawnLinkPlayerObjectEvent(i, i + x, y, gLinkPlayers[i].gender);
+ CreateLinkPlayerSprite(i, gLinkPlayers[i].version);
+ }
+
+ ClearAllPlayerKeys();
+}
+
+static void CreateLinkPlayerSprites(void)
+{
+ u16 i;
+ for (i = 0; i < gFieldLinkPlayerCount; i++)
+ CreateLinkPlayerSprite(i, gLinkPlayers[i].version);
+}
+
+// Quest Log
+
+void sub_805726C(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gUnknown_2036E28 = 1;
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ SetMainCallback1(NULL);
+ SetMainCallback2(CB2_DoChangeMap);
+ gMain.savedCallback = sub_80572D8;
+}
+
+void sub_80572A8(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gUnknown_2036E28 = 1;
+ LoadSaveblockMapHeader();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ SetMainCallback1(NULL);
+ SetMainCallback2(sub_80572D8);
+}
+
+static void sub_80572D8(void)
+{
+ sub_8057300(&gMain.state);
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_Overworld);
+ SetMainCallback2(CB2_Overworld);
+}
+
+static void sub_8057300(u8 *state)
+{
+ while (!sub_8057314(state))
+ ;
+}
+
+static bool32 sub_8057314(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ InitOverworldBgs();
+ FieldClearVBlankHBlankCallbacks();
+ sub_8111F14();
+ sub_81113E4();
+ sub_8111438();
+ if (sub_8110AC8() == 2)
+ {
+ gUnknown_2031DE0 = FALSE;
+ mli0_load_map(FALSE);
+ }
+ else
+ {
+ gUnknown_2031DE0 = TRUE;
+ sub_80559A8();
+ }
+ (*state)++;
+ break;
+ case 1:
+ sub_8110FCC();
+ (*state)++;
+ break;
+ case 2:
+ sub_8057024(0);
+ (*state)++;
+ break;
+ case 3:
+ sub_8057100();
+ sub_8057114();
+ (*state)++;
+ break;
+ case 4:
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
+ (*state)++;
+ break;
+ case 5:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 6:
+ copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 7:
+ copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 8:
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
+ }
+ break;
+ case 9:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 10:
+ InitTilesetAnimations();
+ sub_815A540();
+ (*state)++;
+ break;
+ default:
+ if (map_post_load_hook_exec())
+ return TRUE;
+ break;
+ }
+ return FALSE;
+}
+
+void sub_8057430(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ gUnknown_2036E28 = 3;
+ ResetSafariZoneFlag_();
+ LoadSaveblockMapHeader();
+ LoadSaveblockObjEventScripts();
+ UnfreezeObjectEvents();
+ sub_8054E40();
+ InitMapFromSavedGame();
+ PlayTimeCounter_Start();
+ ScriptContext1_Init();
+ gUnknown_2031DE0 = TRUE;
+ if (UseContinueGameWarp() == TRUE)
+ {
+ ClearContinueGameWarpStatus();
+ SetWarpDestinationToContinueGameWarp();
+ WarpIntoMap();
+ SetMainCallback2(CB2_LoadMap);
+ }
+ else
+ {
+ SetMainCallback1(CB1_Overworld);
+ CB2_ReturnToField();
+ }
+}
+
+// Credits
+
+void Overworld_CreditsMainCB(void)
+{
+ bool8 fading = !!gPaletteFade.active;
+ if (fading)
+ SetVBlankCallback(NULL);
+ RunTasks();
+ AnimateSprites();
+ sub_805ACF0();
+ UpdateCameraPanning();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ UpdateTilesetAnimations();
+ DoScheduledBgTilemapCopiesToVram();
+ if (fading)
+ SetFieldVBlankCallback();
+}
+
+static bool8 FieldCB2_Credits_WaitFade(void)
+{
+ if (gPaletteFade.active)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool32 Overworld_DoScrollSceneForCredits(u8 *state_p, const struct CreditsOverworldCmd * script, u8 a2)
+{
+ sCreditsOverworld_Script = script;
+ gUnknown_2036E28 = a2;
+ return SetUpScrollSceneForCredits(state_p, 0);
+}
+
+static bool32 SetUpScrollSceneForCredits(u8 *state, u8 unused)
+{
+ struct WarpData warp;
+ switch (*state)
+ {
+ case 0:
+ sCreditsOverworld_CmdIndex = 0;
+ sCreditsOverworld_CmdLength = 0;
+ (*state)++;
+ return FALSE;
+ case 1:
+ warp.mapGroup = sCreditsOverworld_Script[sCreditsOverworld_CmdIndex].unk_2;
+ warp.mapNum = sCreditsOverworld_Script[sCreditsOverworld_CmdIndex].unk_4;
+ warp.warpId = -1;
+ sCreditsOverworld_CmdIndex++;
+ warp.x = sCreditsOverworld_Script[sCreditsOverworld_CmdIndex].unk_0;
+ warp.y = sCreditsOverworld_Script[sCreditsOverworld_CmdIndex].unk_2;
+ sWarpDestination = warp;
+ sCreditsOverworld_CmdLength = sCreditsOverworld_Script[sCreditsOverworld_CmdIndex].unk_4;
+ WarpIntoMap();
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ SetMainCallback1(NULL);
+ gFieldCallback2 = FieldCB2_Credits_WaitFade;
+ gMain.state = 0;
+ (*state)++;
+ return FALSE;
+ case 2:
+ if (MapLdr_Credits())
+ {
+ (*state)++;
+ return FALSE;
+ }
+ break;
+ case 3:
+ gFieldCamera.callback = CameraCB_CreditsPan;
+ SetFieldVBlankCallback();
+ *state = 0;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool8 MapLdr_Credits(void)
+{
+ u8 *state = &gMain.state;
+ switch (*state)
+ {
+ case 0:
+ InitOverworldBgs_NoResetHeap();
+ mli0_load_map(FALSE);
+ (*state)++;
+ break;
+ case 1:
+ ScanlineEffect_Clear();
+ ResetAllPicSprites();
+ ResetCameraUpdateInfo();
+ InstallCameraPanAheadCallback();
+ FieldEffectActiveListClear();
+ StartWeather();
+ ResumePausedWeather();
+ SetUpFieldTasks();
+ RunOnResumeMapScript();
+ (*state)++;
+ break;
+ case 2:
+ InitCurrentFlashLevelScanlineEffect();
+ InitOverworldGraphicsRegisters();
+ (*state)++;
+ break;
+ case 3:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 4:
+ copy_map_tileset1_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 5:
+ copy_map_tileset2_to_vram(gMapHeader.mapLayout);
+ (*state)++;
+ break;
+ case 6:
+ if (FreeTempTileDataBuffersIfPossible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
+ (*state)++;
+ }
+ break;
+ case 7:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 8:
+ InitTilesetAnimations();
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ FadeSelectedPals(FADE_FROM_BLACK, 0, 0x3FFFFFFF);
+ (*state)++;
+ break;
+ default:
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void CameraCB_CreditsPan(struct CameraObject * camera)
+{
+ if (sCreditsOverworld_CmdLength == 0)
+ {
+ sCreditsOverworld_CmdIndex++;
+ switch (sCreditsOverworld_Script[sCreditsOverworld_CmdIndex].unk_0)
+ {
+ case CREDITSOVWLDCMD_FC:
+ case CREDITSOVWLDCMD_LOADMAP:
+ return;
+ case CREDITSOVWLDCMD_FF:
+ camera->movementSpeedX = 0;
+ camera->movementSpeedY = 0;
+ camera->callback = NULL;
+ CreateTask(Task_OvwldCredits_FadeOut, 0);
+ return;
+ case CREDITSOVWLDCMD_FB:
+ camera->movementSpeedX = 0;
+ camera->movementSpeedY = 0;
+ camera->callback = NULL;
+ break;
+ case CREDITSOVWLDCMD_END:
+ camera->movementSpeedX = 0;
+ camera->movementSpeedY = 0;
+ camera->callback = NULL;
+ return;
+ default:
+ sCreditsOverworld_CmdLength = sCreditsOverworld_Script[sCreditsOverworld_CmdIndex].unk_4;
+ camera->movementSpeedX = sCreditsOverworld_Script[sCreditsOverworld_CmdIndex].unk_0;
+ camera->movementSpeedY = sCreditsOverworld_Script[sCreditsOverworld_CmdIndex].unk_2;
+ break;
+ }
+ }
+ if (sCreditsOverworld_Script[sCreditsOverworld_CmdIndex].unk_0 == 0xFF)
+ {
+ camera->movementSpeedX = 0;
+ camera->movementSpeedY = 0;
+ }
+ else
+ sCreditsOverworld_CmdLength--;
+}
+
+static void Task_OvwldCredits_FadeOut(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = Task_OvwldCredits_WaitFade;
+}
+
+static void Task_OvwldCredits_WaitFade(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ CleanupOverworldWindowsAndTilemaps();
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(taskId);
+ }
+}
+
+// Link related
+
+static u8 (*const sLinkPlayerMovementModes[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8) = {
+ MovementEventModeCB_Normal, // MOVEMENT_MODE_FREE
+ MovementEventModeCB_Ignored, // MOVEMENT_MODE_FROZEN
+ MovementEventModeCB_Normal_2, // MOVEMENT_MODE_SCRIPTED
+};
+
+// These handlers return TRUE if the movement was scripted and successful, and FALSE otherwise.
+static bool8 (*const sLinkPlayerFacingHandlers[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8) = {
+ FacingHandler_DoNothing,
+ FacingHandler_DpadMovement,
+ FacingHandler_DpadMovement,
+ FacingHandler_DpadMovement,
+ FacingHandler_DpadMovement,
+ FacingHandler_DoNothing,
+ FacingHandler_DoNothing,
+ FacingHandler_ForcedFacingChange,
+ FacingHandler_ForcedFacingChange,
+ FacingHandler_ForcedFacingChange,
+ FacingHandler_ForcedFacingChange,
+};
+
+// These handlers are run after an attempted movement.
+static void (*const sMovementStatusHandler[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *) = {
+ // FALSE:
+ MovementStatusHandler_EnterFreeMode,
+ // TRUE:
+ MovementStatusHandler_TryAdvanceScript,
+};
+
+static void CB1_UpdateLinkState(void)
+{
+ if (gWirelessCommType == 0 || !IsRfuRecvQueueEmpty() || !IsSendingKeysToLink())
+ {
+ u8 selfId = gLocalLinkPlayerId;
+ UpdateAllLinkPlayers(gLinkPartnersHeldKeys, selfId);
+
+ // Note: Because guestId is between 0 and 4, while the smallest key code is
+ // LINK_KEY_CODE_EMPTY, this is functionally equivalent to `sPlayerKeyInterceptCallback(0)`.
+ // It is expecting the callback to be KeyInterCB_SelfIdle, and that will
+ // completely ignore any input parameters.
+ //
+ // UpdateHeldKeyCode performs a sanity check on its input; if
+ // sPlayerKeyInterceptCallback echoes back the argument, which is selfId, then
+ // it'll use LINK_KEY_CODE_EMPTY instead.
+ //
+ // Note 2: There are some key intercept callbacks that treat the key as a player
+ // ID. It's so hacky.
+ UpdateHeldKeyCode(sPlayerKeyInterceptCallback(selfId));
+ ClearAllPlayerKeys();
+ }
+}
+
+static void ResetAllMultiplayerState(void)
+{
+ ResetAllTradingStates();
+ SetKeyInterceptCallback(KeyInterCB_SelfIdle);
+}
+
+static void ClearAllPlayerKeys(void)
+{
+ ResetPlayerHeldKeys(gLinkPartnersHeldKeys);
+}
+
+static void SetKeyInterceptCallback(KeyInterCB func)
+{
+ sRfuKeepAliveTimer = 0;
+ sPlayerKeyInterceptCallback = func;
+}
+
+// Once every ~60 frames, if the link state hasn't changed (timer reset by calls
+// to SetKeyInterceptCallback), it does a bunch of sanity checks on the connection.
+// I'm not sure if sRfuKeepAliveTimer is reset in the process, though; rfu stuff is
+// still undocumented.
+static void CheckRfuKeepAliveTimer(void)
+{
+ if (gWirelessCommType != 0 && ++sRfuKeepAliveTimer > 60)
+ LinkRfu_FatalError();
+}
+
+static void ResetAllTradingStates(void)
+{
+ s32 i;
+ for (i = 0; i < 4; i++)
+ sPlayerTradingStates[i] = PLAYER_TRADING_STATE_IDLE;
+}
+
+// Returns true if all connected players are in tradingState.
+static bool32 AreAllPlayersInTradingState(u16 tradingState)
+{
+ s32 i;
+ s32 count = gFieldLinkPlayerCount;
+
+ for (i = 0; i < count; i++)
+ if (sPlayerTradingStates[i] != tradingState)
+ return FALSE;
+ return TRUE;
+}
+
+static bool32 IsAnyPlayerInTradingState(u16 tradingState)
+{
+ s32 i;
+ s32 count = gFieldLinkPlayerCount;
+
+ for (i = 0; i < count; i++)
+ if (sPlayerTradingStates[i] == tradingState)
+ return TRUE;
+ return FALSE;
+}
+
+static void HandleLinkPlayerKeyInput(u32 playerId, u16 key, struct TradeRoomPlayer *trainer, u16 *forceFacing)
+{
+ const u8 *script;
+
+ if (sPlayerTradingStates[playerId] == PLAYER_TRADING_STATE_IDLE)
+ {
+ script = TryGetTileEventScript(trainer);
+ if (script)
+ {
+ *forceFacing = GetDirectionForEventScript(script);
+ sPlayerTradingStates[playerId] = PLAYER_TRADING_STATE_BUSY;
+ if (trainer->isLocalPlayer)
+ {
+ SetKeyInterceptCallback(KeyInterCB_DeferToEventScript);
+ sub_80581DC(script);
+ }
+ return;
+ }
+ if (IsAnyPlayerInTradingState(PLAYER_TRADING_STATE_EXITING_ROOM) == TRUE)
+ {
+ sPlayerTradingStates[playerId] = PLAYER_TRADING_STATE_BUSY;
+ if (trainer->isLocalPlayer)
+ {
+ SetKeyInterceptCallback(KeyInterCB_DeferToEventScript);
+ sub_8058230();
+ }
+ return;
+ }
+
+ switch (key)
+ {
+ case LINK_KEY_CODE_START_BUTTON:
+ if (sub_8058004(trainer))
+ {
+ sPlayerTradingStates[playerId] = PLAYER_TRADING_STATE_BUSY;
+ if (trainer->isLocalPlayer)
+ {
+ SetKeyInterceptCallback(KeyInterCB_DeferToEventScript);
+ InitLinkRoomStartMenuScript();
+ }
+ }
+ break;
+ case LINK_KEY_CODE_DPAD_DOWN:
+ if (PlayerIsAtSouthExit(trainer) == TRUE)
+ {
+ sPlayerTradingStates[playerId] = PLAYER_TRADING_STATE_BUSY;
+ if (trainer->isLocalPlayer)
+ {
+ SetKeyInterceptCallback(KeyInterCB_DeferToEventScript);
+ CreateConfirmLeaveTradeRoomPrompt();
+ }
+ }
+ break;
+ case LINK_KEY_CODE_A_BUTTON:
+ script = TryInteractWithPlayer(trainer);
+ if (script)
+ {
+ sPlayerTradingStates[playerId] = PLAYER_TRADING_STATE_BUSY;
+ if (trainer->isLocalPlayer)
+ {
+ SetKeyInterceptCallback(KeyInterCB_DeferToEventScript);
+ InitMenuBasedScript(script);
+ }
+ }
+ break;
+ case LINK_KEY_CODE_HANDLE_RECV_QUEUE:
+ if (sub_8057FEC(trainer))
+ {
+ sPlayerTradingStates[playerId] = PLAYER_TRADING_STATE_BUSY;
+ if (trainer->isLocalPlayer)
+ {
+ SetKeyInterceptCallback(KeyInterCB_DeferToRecvQueue);
+ sub_80581BC();
+ }
+ }
+ break;
+ case LINK_KEY_CODE_HANDLE_SEND_QUEUE:
+ if (sub_8057FEC(trainer))
+ {
+ sPlayerTradingStates[playerId] = PLAYER_TRADING_STATE_BUSY;
+ if (trainer->isLocalPlayer)
+ {
+ SetKeyInterceptCallback(KeyInterCB_DeferToSendQueue);
+ sub_80581BC();
+ }
+ }
+ break;
+ }
+ }
+
+ switch (key)
+ {
+ case LINK_KEY_CODE_EXIT_ROOM:
+ sPlayerTradingStates[playerId] = PLAYER_TRADING_STATE_EXITING_ROOM;
+ break;
+ case LINK_KEY_CODE_UNK_2:
+ sPlayerTradingStates[playerId] = PLAYER_TRADING_STATE_UNK_2;
+ break;
+ case LINK_KEY_CODE_UNK_4:
+ sPlayerTradingStates[playerId] = PLAYER_TRADING_STATE_IDLE;
+ if (trainer->isLocalPlayer)
+ SetKeyInterceptCallback(KeyInterCB_SelfIdle);
+ break;
+ case LINK_KEY_CODE_UNK_7:
+ if (sPlayerTradingStates[playerId] == PLAYER_TRADING_STATE_UNK_2)
+ sPlayerTradingStates[playerId] = PLAYER_TRADING_STATE_BUSY;
+ break;
+ }
+}
+
+static void UpdateAllLinkPlayers(u16 *keys, s32 selfId)
+{
+ struct TradeRoomPlayer trainer;
+ s32 i;
+
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ u8 key = keys[i];
+ u16 setFacing = FACING_NONE;
+ LoadTradeRoomPlayer(i, selfId, &trainer);
+ HandleLinkPlayerKeyInput(i, key, &trainer, &setFacing);
+ if (sPlayerTradingStates[i] == PLAYER_TRADING_STATE_IDLE)
+ setFacing = GetDirectionForDpadKey(key);
+ SetPlayerFacingDirection(i, setFacing);
+ }
+}
+
+static void UpdateHeldKeyCode(u16 key)
+{
+ if (key >= LINK_KEY_CODE_EMPTY && key < LINK_KEY_CODE_UNK_8)
+ gHeldKeyCodeToSend = key;
+ else
+ gHeldKeyCodeToSend = LINK_KEY_CODE_EMPTY;
+
+ if (gWirelessCommType != 0
+ && GetLinkSendQueueLength() > 1
+ && IsUpdateLinkStateCBActive() == TRUE
+ && IsSendingKeysToLink() == TRUE)
+ {
+ switch (key)
+ {
+ case LINK_KEY_CODE_EMPTY:
+ case LINK_KEY_CODE_DPAD_DOWN:
+ case LINK_KEY_CODE_DPAD_UP:
+ case LINK_KEY_CODE_DPAD_LEFT:
+ case LINK_KEY_CODE_DPAD_RIGHT:
+ case LINK_KEY_CODE_START_BUTTON:
+ case LINK_KEY_CODE_A_BUTTON:
+ gHeldKeyCodeToSend = LINK_KEY_CODE_NULL;
+ break;
+ }
+ }
+}
+
+static u16 KeyInterCB_ReadButtons(u32 key)
+{
+ if (JOY_HELD(DPAD_UP))
+ return LINK_KEY_CODE_DPAD_UP;
+ else if (JOY_HELD(DPAD_DOWN))
+ return LINK_KEY_CODE_DPAD_DOWN;
+ else if (JOY_HELD(DPAD_LEFT))
+ return LINK_KEY_CODE_DPAD_LEFT;
+ else if (JOY_HELD(DPAD_RIGHT))
+ return LINK_KEY_CODE_DPAD_RIGHT;
+ else if (JOY_NEW(START_BUTTON))
+ return LINK_KEY_CODE_START_BUTTON;
+ else if (JOY_NEW(A_BUTTON))
+ return LINK_KEY_CODE_A_BUTTON;
+ else
+ return LINK_KEY_CODE_EMPTY;
+}
+
+static u16 GetDirectionForDpadKey(u16 a1)
+{
+ switch (a1)
+ {
+ case LINK_KEY_CODE_DPAD_RIGHT:
+ return FACING_RIGHT;
+ case LINK_KEY_CODE_DPAD_LEFT:
+ return FACING_LEFT;
+ case LINK_KEY_CODE_DPAD_UP:
+ return FACING_UP;
+ case LINK_KEY_CODE_DPAD_DOWN:
+ return FACING_DOWN;
+ default:
+ return FACING_NONE;
+ }
+}
+
+// Overwrites the keys with 0x11
+static void ResetPlayerHeldKeys(u16 *keys)
+{
+ s32 i;
+ for (i = 0; i < 4; i++)
+ keys[i] = LINK_KEY_CODE_EMPTY;
+}
+
+static u16 KeyInterCB_SelfIdle(u32 key)
+{
+ if (ScriptContext2_IsEnabled() == TRUE)
+ return LINK_KEY_CODE_EMPTY;
+ if (GetLinkRecvQueueLength() > 4)
+ return LINK_KEY_CODE_HANDLE_RECV_QUEUE;
+ if (GetLinkSendQueueLength() <= 4)
+ return KeyInterCB_ReadButtons(key);
+ return LINK_KEY_CODE_HANDLE_SEND_QUEUE;
+}
+
+static u16 sub_8057D98(u32 key)
+{
+ CheckRfuKeepAliveTimer();
+ return LINK_KEY_CODE_EMPTY;
+}
+
+// Ignore the player's inputs as long as there is an event script
+// in ScriptContext2.
+static u16 KeyInterCB_DeferToEventScript(u32 key)
+{
+ u16 retVal;
+ if (ScriptContext2_IsEnabled() == TRUE)
+ {
+ retVal = LINK_KEY_CODE_EMPTY;
+ }
+ else
+ {
+ retVal = LINK_KEY_CODE_UNK_4;
+ SetKeyInterceptCallback(sub_8057D98);
+ }
+ return retVal;
+}
+
+// Ignore the player's inputs as long as there are events being recived.
+static u16 KeyInterCB_DeferToRecvQueue(u32 key)
+{
+ u16 retVal;
+ if (GetLinkRecvQueueLength() > 2)
+ {
+ retVal = LINK_KEY_CODE_EMPTY;
+ }
+ else
+ {
+ retVal = LINK_KEY_CODE_UNK_4;
+ ScriptContext2_Disable();
+ SetKeyInterceptCallback(sub_8057D98);
+ }
+ return retVal;
+}
+
+// Ignore the player's inputs as long as there are events being sent.
+static u16 KeyInterCB_DeferToSendQueue(u32 key)
+{
+ u16 retVal;
+ if (GetLinkSendQueueLength() > 2)
+ {
+ retVal = LINK_KEY_CODE_EMPTY;
+ }
+ else
+ {
+ retVal = LINK_KEY_CODE_UNK_4;
+ ScriptContext2_Disable();
+ SetKeyInterceptCallback(sub_8057D98);
+ }
+ return retVal;
+}
+
+static u16 KeyInterCB_DoNothingAndKeepAlive(u32 key)
+{
+ CheckRfuKeepAliveTimer();
+ return LINK_KEY_CODE_EMPTY;
+}
+
+static u16 sub_8057E1C(u32 keyOrPlayerId)
+{
+ if (sPlayerTradingStates[keyOrPlayerId] == PLAYER_TRADING_STATE_UNK_2)
+ {
+ if (JOY_NEW(B_BUTTON))
+ {
+ SetKeyInterceptCallback(KeyInterCB_DoNothingAndKeepAlive);
+ return LINK_KEY_CODE_UNK_7;
+ }
+ else
+ {
+ return LINK_KEY_CODE_EMPTY;
+ }
+ }
+ else
+ {
+ CheckRfuKeepAliveTimer();
+ return LINK_KEY_CODE_EMPTY;
+ }
+}
+
+static u16 sub_8057E58(u32 a1)
+{
+ SetKeyInterceptCallback(sub_8057E1C);
+ return LINK_KEY_CODE_UNK_2;
+}
+
+static u16 KeyInterCB_SendNothing(u32 key)
+{
+ return LINK_KEY_CODE_EMPTY;
+}
+
+static u16 KeyInterCB_WaitForPlayersToExit(u32 keyOrPlayerId)
+{
+ // keyOrPlayerId could be any keycode. This callback does no sanity checking
+ // on the size of the key. It's assuming that it is being called from
+ // CB1_UpdateLinkState.
+ if (sPlayerTradingStates[keyOrPlayerId] != PLAYER_TRADING_STATE_EXITING_ROOM)
+ CheckRfuKeepAliveTimer();
+ if (AreAllPlayersInTradingState(PLAYER_TRADING_STATE_EXITING_ROOM) == TRUE)
+ {
+ ScriptContext1_SetupScript(CableClub_EventScript_DoLinkRoomExit);
+ SetKeyInterceptCallback(KeyInterCB_SendNothing);
+ }
+ return LINK_KEY_CODE_EMPTY;
+}
+
+static u16 KeyInterCB_SendExitRoomKey(u32 key)
+{
+ SetKeyInterceptCallback(KeyInterCB_WaitForPlayersToExit);
+ return LINK_KEY_CODE_EXIT_ROOM;
+}
+
+// Duplicate function.
+static u16 KeyInterCB_SendNothing_2(u32 key)
+{
+ return LINK_KEY_CODE_EMPTY;
+}
+
+u32 sub_8057EC0(void)
+{
+ if (IsAnyPlayerInTradingState(PLAYER_TRADING_STATE_EXITING_ROOM) == TRUE)
+ return 2;
+ if (sPlayerKeyInterceptCallback == sub_8057E1C && sPlayerTradingStates[gLocalLinkPlayerId] != PLAYER_TRADING_STATE_UNK_2)
+ return 0;
+ if (sPlayerKeyInterceptCallback == KeyInterCB_DoNothingAndKeepAlive && sPlayerTradingStates[gLocalLinkPlayerId] == PLAYER_TRADING_STATE_BUSY)
+ return 2;
+ if (AreAllPlayersInTradingState(PLAYER_TRADING_STATE_UNK_2) != FALSE)
+ return 1;
+ return 0;
+}
+
+static bool32 sub_8057F28(void)
+{
+ return IsAnyPlayerInTradingState(PLAYER_TRADING_STATE_EXITING_ROOM);
+}
+
+u16 sub_8057F34(void)
+{
+ SetKeyInterceptCallback(sub_8057E58);
+ return 0;
+}
+
+u16 sub_8057F48(void)
+{
+ SetKeyInterceptCallback(KeyInterCB_DeferToEventScript);
+ return 0;
+}
+
+// The exit room key will be sent at the next opportunity.
+// The return value is meaningless.
+u16 QueueExitLinkRoomKey(void)
+{
+ SetKeyInterceptCallback(KeyInterCB_SendExitRoomKey);
+ return 0;
+}
+
+u16 sub_8057F70(void)
+{
+ SetKeyInterceptCallback(KeyInterCB_SendNothing_2);
+ return 0;
+}
+
+static void LoadTradeRoomPlayer(s32 linkPlayerId, s32 myPlayerId, struct TradeRoomPlayer *trainer)
+{
+ s16 x, y;
+
+ trainer->playerId = linkPlayerId;
+ trainer->isLocalPlayer = (linkPlayerId == myPlayerId) ? TRUE : FALSE;
+ trainer->c = gLinkPlayerObjectEvents[linkPlayerId].movementMode;
+ trainer->facing = GetLinkPlayerFacingDirection(linkPlayerId);
+ GetLinkPlayerCoords(linkPlayerId, &x, &y);
+ trainer->pos.x = x;
+ trainer->pos.y = y;
+ trainer->pos.height = GetLinkPlayerElevation(linkPlayerId);
+ trainer->field_C = MapGridGetMetatileBehaviorAt(x, y);
+}
+
+static bool32 sub_8057FEC(struct TradeRoomPlayer *player)
+{
+ u8 v1 = player->c;
+ if (v1 == MOVEMENT_MODE_SCRIPTED || v1 == MOVEMENT_MODE_FREE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+// Duplicate function.
+static bool32 sub_8058004(struct TradeRoomPlayer *player)
+{
+ u8 v1 = player->c;
+ if (v1 == MOVEMENT_MODE_SCRIPTED || v1 == MOVEMENT_MODE_FREE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static const u8 *TryGetTileEventScript(struct TradeRoomPlayer *player)
+{
+ if (player->c != MOVEMENT_MODE_SCRIPTED)
+ return FACING_NONE;
+ return GetCoordEventScriptAtMapPosition(&player->pos);
+}
+
+static bool32 PlayerIsAtSouthExit(struct TradeRoomPlayer *player)
+{
+ if (player->c != MOVEMENT_MODE_SCRIPTED && player->c != MOVEMENT_MODE_FREE)
+ return FALSE;
+ else if (!MetatileBehavior_IsSouthArrowWarp(player->field_C))
+ return FALSE;
+ else if (player->facing != DIR_SOUTH)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static const u8 *TryInteractWithPlayer(struct TradeRoomPlayer *player)
+{
+ struct MapPosition otherPlayerPos;
+ u8 linkPlayerId;
+
+ if (player->c != MOVEMENT_MODE_FREE && player->c != MOVEMENT_MODE_SCRIPTED)
+ return FACING_NONE;
+
+ otherPlayerPos = player->pos;
+ otherPlayerPos.x += gDirectionToVectors[player->facing].x;
+ otherPlayerPos.y += gDirectionToVectors[player->facing].y;
+ otherPlayerPos.height = 0;
+ linkPlayerId = GetLinkPlayerIdAt(otherPlayerPos.x, otherPlayerPos.y);
+
+ if (linkPlayerId != 4)
+ {
+ if (!player->isLocalPlayer)
+ return CableClub_EventScript_TooBusyToNotice;
+ else if (sPlayerTradingStates[linkPlayerId] != PLAYER_TRADING_STATE_IDLE)
+ return CableClub_EventScript_TooBusyToNotice;
+ else if (!GetSeeingLinkPlayerCardMsg(linkPlayerId))
+ return CableClub_EventScript_ReadTrainerCard;
+ else
+ return CableClub_EventScript_ReadTrainerCardColored;
+ }
+
+ return GetInteractedLinkPlayerScript(&otherPlayerPos, player->field_C, player->facing);
+}
+
+// This returns which direction to force the player to look when one of
+// these event scripts runs.
+static u16 GetDirectionForEventScript(const u8 *script)
+{
+ if (script == BattleColosseum_4P_EventScript_PlayerSpot0)
+ return FACING_FORCED_RIGHT;
+ else if (script == BattleColosseum_4P_EventScript_PlayerSpot1)
+ return FACING_FORCED_LEFT;
+ else if (script == BattleColosseum_4P_EventScript_PlayerSpot2)
+ return FACING_FORCED_RIGHT;
+ else if (script == BattleColosseum_4P_EventScript_PlayerSpot3)
+ return FACING_FORCED_LEFT;
+ else if (script == RecordCenter_EventScript_Spot0)
+ return FACING_FORCED_RIGHT;
+ else if (script == RecordCenter_EventScript_Spot1)
+ return FACING_FORCED_LEFT;
+ else if (script == RecordCenter_EventScript_Spot2)
+ return FACING_FORCED_RIGHT;
+ else if (script == RecordCenter_EventScript_Spot3)
+ return FACING_FORCED_LEFT;
+ else if (script == BattleColosseum_2P_EventScript_PlayerSpot0)
+ return FACING_FORCED_RIGHT;
+ else if (script == BattleColosseum_2P_EventScript_PlayerSpot1)
+ return FACING_FORCED_LEFT;
+ else if (script == TradeCenter_EventScript_Chair0)
+ return FACING_FORCED_RIGHT;
+ else if (script == TradeCenter_EventScript_Chair1)
+ return FACING_FORCED_LEFT;
+ else
+ return FACING_NONE;
+}
+
+static void sub_80581BC(void)
+{
+ ScriptContext2_Enable();
+}
+
+static void InitLinkRoomStartMenuScript(void)
+{
+ PlaySE(SE_WIN_OPEN);
+ ShowStartMenu();
+ ScriptContext2_Enable();
+}
+
+static void sub_80581DC(const u8 *script)
+{
+ PlaySE(SE_SELECT);
+ ScriptContext1_SetupScript(script);
+ ScriptContext2_Enable();
+}
+
+static void CreateConfirmLeaveTradeRoomPrompt(void)
+{
+ PlaySE(SE_WIN_OPEN);
+ ScriptContext1_SetupScript(TradeCenter_ConfirmLeaveRoom);
+ ScriptContext2_Enable();
+}
+
+static void InitMenuBasedScript(const u8 *script)
+{
+ PlaySE(SE_SELECT);
+ ScriptContext1_SetupScript(script);
+ ScriptContext2_Enable();
+}
+
+static void sub_8058230(void)
+{
+ ScriptContext1_SetupScript(TradeCenter_TerminateLink);
+ ScriptContext2_Enable();
+}
+
+bool32 sub_8058244(void)
+{
+ if (!IsUpdateLinkStateCBActive())
+ return FALSE;
+ if (GetLinkRecvQueueLength() >= 3)
+ gUnknown_3000E88 = TRUE;
+ else
+ gUnknown_3000E88 = FALSE;
+ return gUnknown_3000E88;
+}
+
+bool32 sub_8058274(void)
+{
+ u8 temp;
+
+ if (GetLinkRecvQueueLength() < 2)
+ return FALSE;
+ else if (IsUpdateLinkStateCBActive() != TRUE)
+ return FALSE;
+ else if (IsSendingKeysToLink() != TRUE)
+ return FALSE;
+ else if (sPlayerKeyInterceptCallback == KeyInterCB_DeferToRecvQueue)
+ return TRUE;
+ else if (sPlayerKeyInterceptCallback != KeyInterCB_DeferToEventScript)
+ return FALSE;
+
+ temp = gUnknown_3000E88;
+ gUnknown_3000E88 = FALSE;
+
+ if (temp == TRUE)
+ return TRUE;
+ else if (gPaletteFade.active && gPaletteFade.softwareFadeFinishing)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool32 sub_80582E0(void)
+{
+ if (GetLinkSendQueueLength() < 2)
+ return FALSE;
+ else if (IsUpdateLinkStateCBActive() != TRUE)
+ return FALSE;
+ else if (IsSendingKeysToLink() != TRUE)
+ return FALSE;
+ else if (sPlayerKeyInterceptCallback == KeyInterCB_DeferToSendQueue)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool32 sub_8058318(void)
+{
+ if (gWirelessCommType != 0)
+ return FALSE;
+ else if (!IsSendingKeysToLink())
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static u32 GetLinkSendQueueLength(void)
+{
+ if (gWirelessCommType != 0)
+ return Rfu.sendQueue.count;
+ else
+ return gLink.sendQueue.count;
+}
+
+static void ZeroLinkPlayerObjectEvent(struct LinkPlayerObjectEvent *linkPlayerObjEvent)
+{
+ memset(linkPlayerObjEvent, 0, sizeof(struct LinkPlayerObjectEvent));
+}
+
+void ClearLinkPlayerObjectEvents(void)
+{
+ memset(gLinkPlayerObjectEvents, 0, sizeof(gLinkPlayerObjectEvents));
+}
+
+static void ZeroObjectEvent(struct ObjectEvent *objEvent)
+{
+ memset(objEvent, 0, sizeof(struct ObjectEvent));
+}
+
+static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 a4)
+{
+ u8 objEventId = GetFirstInactiveObjectEventId();
+ struct LinkPlayerObjectEvent *linkPlayerObjEvent = &gLinkPlayerObjectEvents[linkPlayerId];
+ struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
+
+ ZeroLinkPlayerObjectEvent(linkPlayerObjEvent);
+ ZeroObjectEvent(objEvent);
+
+ linkPlayerObjEvent->active = TRUE;
+ linkPlayerObjEvent->linkPlayerId = linkPlayerId;
+ linkPlayerObjEvent->objEventId = objEventId;
+ linkPlayerObjEvent->movementMode = MOVEMENT_MODE_FREE;
+
+ objEvent->active = TRUE;
+ objEvent->singleMovementActive = a4;
+ objEvent->range.as_byte = 2;
+ objEvent->spriteId = MAX_SPRITES;
+
+ InitLinkPlayerObjectEventPos(objEvent, x, y);
+}
+
+static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s16 y)
+{
+ objEvent->currentCoords.x = x;
+ objEvent->currentCoords.y = y;
+ objEvent->previousCoords.x = x;
+ objEvent->previousCoords.y = y;
+ SetSpritePosToMapCoords(x, y, &objEvent->initialCoords.x, &objEvent->initialCoords.y);
+ objEvent->initialCoords.x += 8;
+ ObjectEventUpdateZCoord(objEvent);
+}
+
+static void sub_8058488(u8 linkPlayerId, u8 a2)
+{
+ if (gLinkPlayerObjectEvents[linkPlayerId].active)
+ {
+ u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
+ struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
+ objEvent->range.as_byte = a2;
+ }
+}
+
+static void sub_80584B8(u8 linkPlayerId)
+{
+ struct LinkPlayerObjectEvent *linkPlayerObjEvent = &gLinkPlayerObjectEvents[linkPlayerId];
+ u8 objEventId = linkPlayerObjEvent->objEventId;
+ struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
+ if (objEvent->spriteId != MAX_SPRITES)
+ DestroySprite(&gSprites[objEvent->spriteId]);
+ linkPlayerObjEvent->active = FALSE;
+ objEvent->active = FALSE;
+}
+
+// Returns the spriteId corresponding to this player.
+static u8 GetSpriteForLinkedPlayer(u8 linkPlayerId)
+{
+ u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
+ struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
+ return objEvent->spriteId;
+}
+
+static void GetLinkPlayerCoords(u8 linkPlayerId, u16 *x, u16 *y)
+{
+ u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
+ struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
+ *x = objEvent->currentCoords.x;
+ *y = objEvent->currentCoords.y;
+}
+
+static u8 GetLinkPlayerFacingDirection(u8 linkPlayerId)
+{
+ u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
+ struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
+ return objEvent->range.as_byte;
+}
+
+static u8 GetLinkPlayerElevation(u8 linkPlayerId)
+{
+ u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
+ struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
+ return objEvent->currentElevation;
+}
+
+static s32 sub_8058590(u8 linkPlayerId)
+{
+ u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
+ struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
+ return 16 - (s8)objEvent->directionSequenceIndex;
+}
+
+static u8 GetLinkPlayerIdAt(s16 x, s16 y)
+{
+ u8 i;
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ if (gLinkPlayerObjectEvents[i].active
+ && (gLinkPlayerObjectEvents[i].movementMode == 0 || gLinkPlayerObjectEvents[i].movementMode == 2))
+ {
+ struct ObjectEvent *objEvent = &gObjectEvents[gLinkPlayerObjectEvents[i].objEventId];
+ if (objEvent->currentCoords.x == x && objEvent->currentCoords.y == y)
+ return i;
+ }
+ }
+ return 4;
+}
+
+static void SetPlayerFacingDirection(u8 linkPlayerId, u8 facing)
+{
+ struct LinkPlayerObjectEvent *linkPlayerObjEvent = &gLinkPlayerObjectEvents[linkPlayerId];
+ u8 objEventId = linkPlayerObjEvent->objEventId;
+ struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
+
+ if (linkPlayerObjEvent->active)
+ {
+ if (facing > FACING_FORCED_RIGHT)
+ {
+ objEvent->triggerGroundEffectsOnMove = TRUE;
+ }
+ else
+ {
+ // This is a hack to split this code onto two separate lines, without declaring a local variable.
+ // C++ style inline variables would be nice here.
+#define TEMP sLinkPlayerMovementModes[linkPlayerObjEvent->movementMode](linkPlayerObjEvent, objEvent, facing)
+
+ sMovementStatusHandler[TEMP](linkPlayerObjEvent, objEvent);
+
+ // Clean up the hack.
+#undef TEMP
+ }
+ }
+}
+
+static u8 MovementEventModeCB_Normal(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
+{
+ return sLinkPlayerFacingHandlers[a3](linkPlayerObjEvent, objEvent, a3);
+}
+
+static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
+{
+ return FACING_UP;
+}
+
+// Duplicate Function
+static u8 MovementEventModeCB_Normal_2(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
+{
+ return sLinkPlayerFacingHandlers[a3](linkPlayerObjEvent, objEvent, a3);
+}
+
+static bool8 FacingHandler_DoNothing(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
+{
+ return FALSE;
+}
+
+static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
+{
+ s16 x, y;
+
+ objEvent->range.as_byte = FlipVerticalAndClearForced(a3, objEvent->range.as_byte);
+ ObjectEventMoveDestCoords(objEvent, objEvent->range.as_byte, &x, &y);
+
+ if (LinkPlayerDetectCollision(linkPlayerObjEvent->objEventId, objEvent->range.as_byte, x, y))
+ {
+ return FALSE;
+ }
+ else
+ {
+ objEvent->directionSequenceIndex = 16;
+ ShiftObjectEventCoords(objEvent, x, y);
+ ObjectEventUpdateZCoord(objEvent);
+ return TRUE;
+ }
+}
+
+static bool8 FacingHandler_ForcedFacingChange(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
+{
+ objEvent->range.as_byte = FlipVerticalAndClearForced(a3, objEvent->range.as_byte);
+ return FALSE;
+}
+
+// This is called every time a free movement happens. Most of the time it's a No-Op.
+static void MovementStatusHandler_EnterFreeMode(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent)
+{
+ linkPlayerObjEvent->movementMode = MOVEMENT_MODE_FREE;
+}
+
+static void MovementStatusHandler_TryAdvanceScript(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent)
+{
+ objEvent->directionSequenceIndex--;
+ linkPlayerObjEvent->movementMode = MOVEMENT_MODE_FROZEN;
+ MoveCoords(objEvent->range.as_byte, &objEvent->initialCoords.x, &objEvent->initialCoords.y);
+ if (!objEvent->directionSequenceIndex)
+ {
+ ShiftStillObjectEventCoords(objEvent);
+ linkPlayerObjEvent->movementMode = MOVEMENT_MODE_SCRIPTED;
+ }
+}
+
+// Flip Up/Down facing codes. If newFacing doesn't specify a direction, default
+// to oldFacing. Note that this clears also the "FORCED" part of the facing code,
+// even for Left/Right codes.
+static u8 FlipVerticalAndClearForced(u8 newFacing, u8 oldFacing)
+{
+ switch (newFacing)
+ {
+ case FACING_UP:
+ case FACING_FORCED_UP:
+ return DIR_NORTH;
+ case FACING_DOWN:
+ case FACING_FORCED_DOWN:
+ return DIR_SOUTH;
+ case FACING_LEFT:
+ case FACING_FORCED_LEFT:
+ return DIR_WEST;
+ case FACING_RIGHT:
+ case FACING_FORCED_RIGHT:
+ return DIR_EAST;
+ }
+ return oldFacing;
+}
+
+static bool8 LinkPlayerDetectCollision(u8 selfObjEventId, u8 a2, s16 x, s16 y)
+{
+ u8 i;
+ for (i = 0; i < 16; i++)
+ {
+ if (i != selfObjEventId)
+ {
+ if ((gObjectEvents[i].currentCoords.x == x && gObjectEvents[i].currentCoords.y == y)
+ || (gObjectEvents[i].previousCoords.x == x && gObjectEvents[i].previousCoords.y == y))
+ {
+ return TRUE;
+ }
+ }
+ }
+ return MapGridIsImpassableAt(x, y);
+}
+
+static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion)
+{
+ struct LinkPlayerObjectEvent *linkPlayerObjEvent = &gLinkPlayerObjectEvents[linkPlayerId];
+ u8 objEventId = linkPlayerObjEvent->objEventId;
+ struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
+ struct Sprite *sprite;
+
+ if (linkPlayerObjEvent->active)
+ {
+ if (gameVersion == VERSION_FIRE_RED || gameVersion == VERSION_LEAF_GREEN)
+ {
+ objEvent->spriteId = AddPseudoObjectEvent(
+ GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, objEvent->singleMovementActive),
+ SpriteCB_LinkPlayer, 0, 0, 0);
+ }
+ else
+ {
+ objEvent->spriteId = AddPseudoObjectEvent(GetRSAvatarGraphicsIdByGender(objEvent->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
+ }
+
+ sprite = &gSprites[objEvent->spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->data[0] = linkPlayerId;
+ objEvent->triggerGroundEffectsOnMove = FALSE;
+ }
+}
+
+static void SpriteCB_LinkPlayer(struct Sprite *sprite)
+{
+ struct LinkPlayerObjectEvent *linkPlayerObjEvent = &gLinkPlayerObjectEvents[sprite->data[0]];
+ struct ObjectEvent *objEvent = &gObjectEvents[linkPlayerObjEvent->objEventId];
+ sprite->pos1.x = objEvent->initialCoords.x;
+ sprite->pos1.y = objEvent->initialCoords.y;
+ SetObjectSubpriorityByZCoord(objEvent->previousElevation, sprite, 1);
+ sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation);
+
+ if (!linkPlayerObjEvent->movementMode != MOVEMENT_MODE_FREE)
+ StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objEvent->range.as_byte));
+ else
+ StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(objEvent->range.as_byte));
+
+ UpdateObjectEventSpriteVisibility(sprite, 0);
+ if (objEvent->triggerGroundEffectsOnMove)
+ {
+ sprite->invisible = ((sprite->data[7] & 4) >> 2);
+ sprite->data[7]++;
+ }
+}
diff --git a/src/party_menu_specials.c b/src/party_menu_specials.c
index aba11a534..48406da9a 100644
--- a/src/party_menu_specials.c
+++ b/src/party_menu_specials.c
@@ -47,7 +47,7 @@ void SelectMoveDeleterMove(void)
{
ShowSelectMovePokemonSummaryScreen(gPlayerParty, gSpecialVar_0x8004, gPlayerPartyCount - 1, CB2_ReturnToField, 0);
sub_8138B38(3);
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
}
void GetNumMovesSelectedMonHas(void)
diff --git a/src/pokemon_jump_2.c b/src/pokemon_jump_2.c
index aa1238e3f..9f2f9e404 100644
--- a/src/pokemon_jump_2.c
+++ b/src/pokemon_jump_2.c
@@ -1883,7 +1883,7 @@ static int sub_81497A8(void)
static bool32 sub_8149804(void)
{
- return !Rfu.unk_124.count && !Rfu.unk_9e8.count;
+ return !Rfu.unk_124.count && !Rfu.sendQueue.count;
}
static int sub_8149834(u8 *arg0)
diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c
index 86406fa2a..7d154f815 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/post_battle_event_funcs.c
@@ -28,8 +28,8 @@ bool8 EnterHallOfFame(void)
{
SetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME, (gSaveBlock2Ptr->playTimeHours << 16) | (gSaveBlock2Ptr->playTimeMinutes << 8) | gSaveBlock2Ptr->playTimeSeconds);
}
- sub_804C1AC();
- sub_8055738(SPAWN_PALLET_TOWN);
+ SetContinueGameWarpStatus();
+ SetContinueGameWarpToHealLocation(SPAWN_PALLET_TOWN);
gaveAtLeastOneRibbon = FALSE;
for (i = 0, r7 = &ribbonState; i < PARTY_SIZE; i++)
{
diff --git a/src/quest_log.c b/src/quest_log.c
index 21a05f407..3c6b88d3d 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -96,7 +96,7 @@ struct UnkStruct_203B044
u8 gUnknown_3005E88;
u16 sNumEventsInLogEntry;
-struct UnkStruct_3005E90 gUnknown_3005E90;
+struct FieldInput gUnknown_3005E90;
struct QuestLogEntry * sCurQuestLogEntry;
static struct UnkStruct_300201C * sFlagOrVarRecords;
@@ -600,7 +600,7 @@ bool8 sub_8111000(void)
{
LoadPalette(stdpal_get(4), 0xF0, 0x20);
SetQuestLogState(QL_STATE_2);
- FieldCB_UnionRoomWarp();
+ FieldCB_DefaultWarpExit();
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
gUnknown_203AE94.unk_0_0 = 2;
return 1;
@@ -610,7 +610,7 @@ bool8 sub_8111038(void)
{
LoadPalette(stdpal_get(4), 0xF0, 0x20);
SetQuestLogState(QL_STATE_2);
- sub_807DF7C();
+ FieldCB_WarpExitFadeFromBlack();
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
gUnknown_203AE94.unk_0_0 = 2;
return 1;
@@ -1217,7 +1217,7 @@ static bool8 sub_8111F60(void)
{
LoadPalette(stdpal_get(4), 0xF0, 0x20);
DrawPreviouslyOnQuestHeader(0);
- sub_807DF7C();
+ FieldCB_WarpExitFadeFromBlack();
CreateTask(sub_8111F8C, 0xFF);
return TRUE;
}
@@ -1313,7 +1313,7 @@ static void Task_EndQuestLog(u8 taskId)
break;
default:
if (gUnknown_203AE94.unk_0_6 == 1)
- CreateMapNamePopupIfNotAlreadyRunning(1);
+ ShowMapNamePopup(1);
CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400);
Free(gUnknown_203AE90);
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
@@ -1536,7 +1536,7 @@ void sub_811278C(u8 movementActionId, u8 duration)
}
}
-void sub_81127F8(struct UnkStruct_3005E90 * a0)
+void sub_81127F8(struct FieldInput * a0)
{
if (sQuestLogCursor < sNumEventsInLogEntry)
{
@@ -1616,7 +1616,7 @@ static void SetUpQuestLogEntry(u8 kind, struct QuestLogEntry *entry, u16 size)
}
sQuestLogCursor = 0;
gUnknown_203B01C = 0;
- gUnknown_3005E90 = (struct UnkStruct_3005E90){};
+ gUnknown_3005E90 = (struct FieldInput){};
sNextStepDelay = sCurQuestLogEntry[sQuestLogCursor].unk_4;
sMovementScripts[0][0] = sCurQuestLogEntry[sQuestLogCursor].unk_3;
sMovementScripts[0][1] = 0xFF;
diff --git a/src/region_map.c b/src/region_map.c
index 3a902ec0e..f97d67ffc 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -3471,7 +3471,7 @@ static void GetPlayerPositionOnRegionMap(void)
const struct MapHeader * mapHeader;
struct WarpData * warp;
- switch (get_map_light_level_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum))
+ switch (GetMapTypeByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum))
{
default:
case 1:
@@ -3495,12 +3495,12 @@ static void GetPlayerPositionOnRegionMap(void)
y = gSaveBlock1Ptr->escapeWarp.y;
break;
case 9:
- mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->warp2.mapGroup, gSaveBlock1Ptr->warp2.mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->dynamicWarp.mapGroup, gSaveBlock1Ptr->dynamicWarp.mapNum);
gUnknown_20399E4->field_014 = mapHeader->regionMapSectionId;
width = mapHeader->mapLayout->width;
height = mapHeader->mapLayout->height;
- x = gSaveBlock1Ptr->warp2.x;
- y = gSaveBlock1Ptr->warp2.y;
+ x = gSaveBlock1Ptr->dynamicWarp.x;
+ y = gSaveBlock1Ptr->dynamicWarp.y;
break;
case 8:
if ((gUnknown_20399E4->field_014 = gMapHeader.regionMapSectionId) != MAPSEC_SPECIAL_AREA)
@@ -3510,7 +3510,7 @@ static void GetPlayerPositionOnRegionMap(void)
}
else
{
- warp = &gSaveBlock1Ptr->warp2;
+ warp = &gSaveBlock1Ptr->dynamicWarp;
mapHeader = Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum);
gUnknown_20399E4->field_014 = mapHeader->regionMapSectionId;
}
@@ -4318,7 +4318,7 @@ static void sub_80C4F08(u8 taskId)
case 4:
if ((sub_80C3AC8(0) == 2 || sub_80C3AC8(0) == 4) && GetRegionMapPermission(MAPPERM_3) == TRUE)
{
- switch (get_map_light_level_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum))
+ switch (GetMapTypeByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum))
{
case 4:
case 8:
@@ -4388,7 +4388,7 @@ static void sub_80C527C(u16 mapsec)
u16 idx = mapsec - MAPSECS_KANTO;
if (sMapsecToSpawn[idx][2])
{
- sub_805546C(sMapsecToSpawn[idx][2]);
+ SetWarpDestinationToHealLocation(sMapsecToSpawn[idx][2]);
SetUsedFlyQuestLogEvent(sMapsecToSpawn[idx]);
}
else
diff --git a/src/scrcmd.c b/src/scrcmd.c
index af977fbc7..bec0f4942 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -1168,7 +1168,7 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext * ctx)
u16 localId = VarGet(ScriptReadHalfword(ctx));
u8 movementType = ScriptReadByte(ctx);
- Overworld_SetMapObjTemplateMovementType(localId, movementType);
+ Overworld_SetObjEventTemplateMovementType(localId, movementType);
return FALSE;
}
diff --git a/src/script.c b/src/script.c
index ff74b40bc..13c571bac 100644
--- a/src/script.c
+++ b/src/script.c
@@ -358,7 +358,7 @@ void ScriptContext2_RunNewScript(const u8 *ptr)
u8 *mapheader_get_tagged_pointer(u8 tag)
{
- u8 *mapScripts = gMapHeader.mapScripts;
+ const u8 *mapScripts = gMapHeader.mapScripts;
if (mapScripts == NULL)
return NULL;
@@ -370,7 +370,7 @@ u8 *mapheader_get_tagged_pointer(u8 tag)
if (*mapScripts == tag)
{
mapScripts++;
- return (u8 *)(mapScripts[0] + (mapScripts[1] << 8) + (mapScripts[2] << 16) + (mapScripts[3] << 24));
+ return T2_READ_PTR(mapScripts);
}
mapScripts += 5;
}
@@ -379,7 +379,7 @@ u8 *mapheader_get_tagged_pointer(u8 tag)
void mapheader_run_script_by_tag(u8 tag)
{
u8 *ptr = mapheader_get_tagged_pointer(tag);
- if (ptr)
+ if (ptr != NULL)
ScriptContext2_RunNewScript(ptr);
}
@@ -387,7 +387,7 @@ u8 *mapheader_get_first_match_from_tagged_ptr_list(u8 tag)
{
u8 *ptr = mapheader_get_tagged_pointer(tag);
- if (!ptr)
+ if (ptr == NULL)
return NULL;
while (1)
@@ -411,22 +411,22 @@ void RunOnLoadMapScript(void)
mapheader_run_script_by_tag(1);
}
-void mapheader_run_script_with_tag_x3(void)
+void RunOnTransitionMapScript(void)
{
mapheader_run_script_by_tag(3);
}
-void mapheader_run_script_with_tag_x5(void)
+void RunOnResumeMapScript(void)
{
mapheader_run_script_by_tag(5);
}
-void mapheader_run_script_with_tag_x7(void)
+void RunOnReturnToFieldMapScript(void)
{
mapheader_run_script_by_tag(7);
}
-void mapheader_run_script_with_tag_x6(void)
+void RunOnDiveWarpMapScript(void)
{
mapheader_run_script_by_tag(6);
}
@@ -447,7 +447,7 @@ bool8 TryRunOnFrameMapScript(void)
return 1;
}
-void mapheader_run_first_tag4_script_list_match(void)
+void TryRunOnWarpIntoMapScript(void)
{
u8 *ptr = mapheader_get_first_match_from_tagged_ptr_list(4);
if (ptr)
diff --git a/src/seagallop.c b/src/seagallop.c
index fb55e6bd2..f7405296f 100644
--- a/src/seagallop.c
+++ b/src/seagallop.c
@@ -322,7 +322,7 @@ static void Task_Seagallop_3(void)
SetWarpDestination(warpInfo[0], warpInfo[1], -1, warpInfo[2], warpInfo[3]);
PlayRainStoppingSoundEffect();
PlaySE(SE_KAIDAN);
- gFieldCallback = FieldCB_UnionRoomWarp;
+ gFieldCallback = FieldCB_DefaultWarpExit;
WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
ResetInitialPlayerAvatarState();
diff --git a/src/strings.c b/src/strings.c
index 547a36138..fbe51254c 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -958,8 +958,8 @@ const u8 gText_Sorry[] = _("SORRY");
const u8 gText_YaySmileEmoji[] = _("YAY{EXTRA 0xF9}");
const u8 gText_ThankYou[] = _("THANK YOU");
const u8 gText_ByeBye[] = _("BYE-BYE!");
-const u8 gUnknown_841B554[] = _("{PLAYER} scurried to a POKéMON CENTER,\nprotecting the exhausted and fainted\nPOKéMON from further harm‥\p");
-const u8 gUnknown_841B5B6[] = _("{PLAYER} scurried back home, protecting\nthe exhausted and fainted POKéMON from\nfurther harm‥\p");
+const u8 gText_PlayerScurriedToCenter[] = _("{PLAYER} scurried to a POKéMON CENTER,\nprotecting the exhausted and fainted\nPOKéMON from further harm‥\p");
+const u8 gText_PlayerScurriedBackHome[] = _("{PLAYER} scurried back home, protecting\nthe exhausted and fainted POKéMON from\nfurther harm‥\p");
const u8 gUnknown_841B60E[] = _("PLAYER: {DYNAMIC 0x00}");
const u8 gUnknown_841B619[] = _("This document is issued in\nrecognition of your magnificent\nachievement - the completion of\nthe {DYNAMIC 0x01} POKéDEX.");
const u8 gUnknown_841B684[] = _("GAME FREAK");
diff --git a/src/trade.c b/src/trade.c
index bd6860e85..bb2634613 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -2022,7 +2022,7 @@ static void sub_804E944(void)
Free(sTradeMenuResourcesPtr);
FreeAllWindowBuffers();
DestroyWirelessStatusIndicatorSprite();
- SetMainCallback2(c2_8056854);
+ SetMainCallback2(CB2_ReturnToFieldFromMultiplayer);
}
}
else
@@ -2032,7 +2032,7 @@ static void sub_804E944(void)
Free(sSpriteTextTileBuffer);
Free(sTradeMenuResourcesPtr);
FreeAllWindowBuffers();
- SetMainCallback2(c2_8056854);
+ SetMainCallback2(CB2_ReturnToFieldFromMultiplayer);
}
}
}
diff --git a/src/trade_scene.c b/src/trade_scene.c
index d609a9b53..308cd6e5b 100644
--- a/src/trade_scene.c
+++ b/src/trade_scene.c
@@ -2747,7 +2747,7 @@ static void Task_WaitFadeAndStartInGameTradeAnim(u8 taskId)
if (!gPaletteFade.active)
{
SetMainCallback2(CB2_InitTradeAnim_InGameTrade);
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
DestroyTask(taskId);
}
}
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
index 599e4f9b4..7054a13ed 100644
--- a/src/vs_seeker.c
+++ b/src/vs_seeker.c
@@ -681,7 +681,7 @@ bool8 sub_810C4EC(void)
return FALSE;
}
-void sub_810C578(void)
+void TryUpdateRandomTrainerRematches(u16 mapGroup, u16 mapNum)
{
FlagClear(FLAG_SYS_VS_SEEKER_CHARGING);
sub_810C640();
diff --git a/sym_bss.txt b/sym_bss.txt
index 321e0a2b8..3c3e98c58 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -20,21 +20,8 @@
.include "src/trade.o"
.align 2
.include "src/play_time.o"
-
- .align 2
- @ .include "src/overworld.o"
-gUnknown_3000E80: @ 3000E80
- .space 0x4
-
-gUnknown_3000E84: @ 3000E84
- .space 0x4
-
-gUnknown_3000E88: @ 3000E88
- .space 0x1
-
-gUnknown_3000E89: @ 3000E89
- .space 0x7
-
+ .align 2
+ .include "src/overworld.o"
.align 3
.include "src/field_camera.o"
.align 3
diff --git a/sym_common.txt b/sym_common.txt
index 2a03004de..90e0f5104 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -18,33 +18,8 @@
.include "random.o"
.align 2
.include "load_save.o"
-
- .align 2
- @ .include "overworld.o"
-gBGTilemapBuffers1: @ 3005014
- .space 0x4
-
-gBGTilemapBuffers2: @ 3005018
- .space 0x4
-
-gBGTilemapBuffers3: @ 300501C
- .space 0x4
-
-gFieldCallback: @ 3005020
- .space 0x4
-
-gFieldCallback2: @ 3005024
- .space 0x4
-
-gHeldKeyCodeToSend: @ 3005028
- .space 0x4
-
-gLocalLinkPlayerId: @ 300502C
- .space 0x4
-
-gFieldLinkPlayerCount: @ 3005030
- .space 0x10
-
+ .align 2
+ .include "overworld.o"
.align 4
.include "fieldmap.o"
.align 4
diff --git a/sym_ewram.txt b/sym_ewram.txt
index c1eca3171..812c98214 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -32,48 +32,8 @@
.include "src/trade_scene.o"
.align 2
.include "src/new_game.o"
-
.align 2
- @ .include "src/overworld.o"
-gUnknown_2031DB4: @ 2031DB4
- .space 0x8
-
-gUnknown_2031DBC: @ 2031DBC
- .space 0x8
-
-gUnknown_2031DC4: @ 2031DC4
- .space 0x8
-
-gUnknown_2031DCC: @ 2031DCC
- .space 0x8
-
-gUnknown_2031DD4: @ 2031DD4
- .space 0x4
-
-gDisableMapMusicChangeOnMapLoad: @ 2031DD8
- .space 0x2
-
-gUnknown_2031DDA: @ 2031DDA
- .space 0x2
-
-gUnknown_2031DDC: @ 2031DDC
- .space 0x4
-
-gUnknown_2031DE0: @ 2031DE0
- .space 0x4
-
-gUnknown_2031DE4: @ 2031DE4
- .space 0x4
-
-gUnknown_2031DE8: @ 2031DE8
- .space 0x2
-
-gUnknown_2031DEA: @ 2031DEA
- .space 0x2
-
-gLinkPlayerObjectEvents: @ 2031DEC
- .space 0x10
-
+ .include "src/overworld.o"
.align 2
.include "src/fieldmap.o"
.align 2