diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2020-03-29 09:27:45 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-29 09:27:45 -0400 |
commit | 75ae00beff77e166c4ae573300ed5cb31175e8ac (patch) | |
tree | ec15c56d3b09c2cec74ac907110c9111e18e8729 | |
parent | d8c9214e0a911882daf28dec07204de3c3c2df80 (diff) | |
parent | 9cfc34f2ec26d45085d9c4006b21406f8f968ed6 (diff) |
Merge pull request #315 from PikalaxALT/overworld
Overworld
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 = ®_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 |