summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/overworld.s652
-rw-r--r--berry_fix/payload/include/global.h4
-rw-r--r--include/global.h4
-rw-r--r--include/heal_location.h2
-rw-r--r--include/overworld.h12
-rw-r--r--src/field_effect.c4
-rw-r--r--src/field_screen_effect.c2
-rw-r--r--src/field_specials.c24
-rw-r--r--src/heal_location.c2
-rw-r--r--src/load_save.c2
-rw-r--r--src/overworld.c157
-rw-r--r--src/post_battle_event_funcs.c2
-rw-r--r--src/region_map.c14
-rw-r--r--sym_ewram.txt42
14 files changed, 201 insertions, 722 deletions
diff --git a/asm/overworld.s b/asm/overworld.s
index 05f31a8fb..7e4a266d3 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -5,644 +5,6 @@
.text
- 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 ApplyCurrentWarp
- bl LoadCurrentMapData
- 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 @ =sWarpDestination
- 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 SetWarpData
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080553C4: .4byte sWarpDestination
- 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 SetWarpData
- 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 SetWarpData
- 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 @ =sWarpDestination
- 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 sWarpDestination
-_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 @ =sWarpDestination
- 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 sWarpDestination
-_080554B8: .4byte gSaveBlock1Ptr
- thumb_func_end copy_saved_warp3_bank_and_enter_x_to_warp1
-
- thumb_func_start Overworld_SetWhiteoutRespawnPoint
-Overworld_SetWhiteoutRespawnPoint: @ 80554BC
- push {lr}
- ldr r0, _080554C8 @ =sWarpDestination
- bl SetWhiteoutRespawnWarpAndHealerNpc
- pop {r0}
- bx r0
- .align 2, 0
-_080554C8: .4byte sWarpDestination
- thumb_func_end Overworld_SetWhiteoutRespawnPoint
-
- 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 SetWarpData
-_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 @ =sWarpDestination
- 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 sWarpDestination
-_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 SetWarpData
- 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 @ =sWarpDestination
- 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 sWarpDestination
-_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 @ =gFixedDiveWarp
- 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 SetWarpData
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08055630: .4byte gFixedDiveWarp
- thumb_func_end SetFixedDiveWarp
-
- thumb_func_start warp1_set_to_warp2
-warp1_set_to_warp2: @ 8055634
- ldr r2, _08055644 @ =sWarpDestination
- ldr r0, _08055648 @ =gFixedDiveWarp
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .align 2, 0
-_08055644: .4byte sWarpDestination
-_08055648: .4byte gFixedDiveWarp
- 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 @ =gFixedHoleWarp
- 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 SetWarpData
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08055684: .4byte gFixedHoleWarp
- 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 @ =gFixedHoleWarp
- adds r0, r4, 0
- bl IsDummyWarp
- cmp r0, 0x1
- bne _080556BC
- ldr r2, _080556B4 @ =sWarpDestination
- ldr r0, _080556B8 @ =gLastUsedWarp
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- b _080556D6
- .align 2, 0
-_080556B0: .4byte gFixedHoleWarp
-_080556B4: .4byte sWarpDestination
-_080556B8: .4byte gLastUsedWarp
-_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 @ =sWarpDestination
- 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 sWarpDestination
-_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 SetWarpData
- 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 SetWarpData
-_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}
@@ -719,7 +81,7 @@ _080557FC:
.align 2, 0
_08055810: .4byte gFixedDiveWarp
_08055814:
- bl warp1_set_to_warp2
+ bl SetWarpDestinationToDiveWarp
_08055818:
movs r0, 0x1
_0805581A:
@@ -1933,8 +1295,8 @@ _08056152:
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
+ thumb_func_start GetMapTypeByGroupAndId
+GetMapTypeByGroupAndId: @ 8056158
push {lr}
lsls r0, 24
asrs r0, 8
@@ -1946,7 +1308,7 @@ get_map_light_level_by_bank_and_number: @ 8056158
ldrb r0, [r0, 0x17]
pop {r1}
bx r1
- thumb_func_end get_map_light_level_by_bank_and_number
+ thumb_func_end GetMapTypeByGroupAndId
thumb_func_start get_map_light_level_from_warp
get_map_light_level_from_warp: @ 8056170
@@ -1956,7 +1318,7 @@ get_map_light_level_from_warp: @ 8056170
movs r1, 0x1
ldrsb r1, [r0, r1]
adds r0, r2, 0
- bl get_map_light_level_by_bank_and_number
+ bl GetMapTypeByGroupAndId
lsls r0, 24
lsrs r0, 24
pop {r1}
@@ -2936,7 +2298,7 @@ CB2_ContinueSavedGame: @ 8056938
cmp r0, 0x1
bne _0805699C
bl sav2_x9_clear_bit1
- bl warp1_set_to_sav1w
+ bl SetWarpDestinationToContinueGameWarp
bl WarpIntoMap
ldr r0, _08056998 @ =CB2_LoadMap
bl SetMainCallback2
@@ -4217,7 +3579,7 @@ sub_8057430: @ 8057430
cmp r0, 0x1
bne _08057490
bl sav2_x9_clear_bit1
- bl warp1_set_to_sav1w
+ bl SetWarpDestinationToContinueGameWarp
bl WarpIntoMap
ldr r0, _0805748C @ =CB2_LoadMap
bl SetMainCallback2
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/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/overworld.h b/include/overworld.h
index f129d849f..2ae7559d2 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -82,8 +82,8 @@ 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);
@@ -107,7 +107,7 @@ 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);
+u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum);
void sub_8086194(void);
void sub_8084CCC(u8 spawn);
void SetWarpDestinationToMapWarp(s8 mapGroup, s8 mapNum, s8 warpNum);
@@ -173,12 +173,12 @@ void CB2_ReturnToFieldWithOpenMenu(void);
void CB2_WhiteOut(void);
void c2_8056854(void);
void ApplyNewEncryptionKeyToGameStats(u32 newKey);
-void sub_8055778(int);
+void SetContinueGameWarpToDynamicWarp(int);
-void sub_8055738(u8 loc);
+void SetContinueGameWarpToHealLocation(u8 loc);
void sub_8056078(void *, void *);
-void sub_805546C(u8 a0);
+void SetWarpDestinationToHealLocation(u8 a0);
bool32 sub_80582E0(void);
bool32 sub_8058274(void);
u8 GetCurrentMapBattleScene(void);
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_screen_effect.c b/src/field_screen_effect.c
index a12b57b24..c376e1bad 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -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
diff --git a/src/field_specials.c b/src/field_specials.c
index 4cc78e81a..d0c35ae66 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -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):
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/load_save.c b/src/load_save.c
index 5cf817dc6..85e2d31ba 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -144,7 +144,7 @@ void sub_804C1AC(void)
void SetContinueGameWarpStatusToDynamicWarp(void)
{
- sub_8055778(0);
+ SetContinueGameWarpToDynamicWarp(0);
gSaveBlock2Ptr->specialSaveWarpFlags |= CONTINUE_GAME_WARP;
}
diff --git a/src/overworld.c b/src/overworld.c
index cfb1533f3..fcbca19a1 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -3,8 +3,10 @@
#include "event_data.h"
#include "event_scripts.h"
#include "field_camera.h"
+#include "field_player_avatar.h"
#include "field_specials.h"
#include "fieldmap.h"
+#include "heal_location.h"
#include "load_save.h"
#include "money.h"
#include "overworld.h"
@@ -14,6 +16,7 @@
#include "tileset_anims.h"
#include "constants/maps.h"
#include "constants/flags.h"
+#include "constants/species.h"
struct InitialPlayerAvatarState
{
@@ -27,6 +30,18 @@ EWRAM_DATA struct WarpData sWarpDestination = {};
EWRAM_DATA struct WarpData gFixedDiveWarp = {};
EWRAM_DATA struct WarpData gFixedHoleWarp = {};
EWRAM_DATA struct InitialPlayerAvatarState gUnknown_2031DD4 = {};
+EWRAM_DATA bool8 gDisableMapMusicChangeOnMapLoad = FALSE;
+EWRAM_DATA u16 gUnknown_2031DDA = SPECIES_NONE;
+EWRAM_DATA bool8 gUnknown_2031DDC = FALSE;
+
+// File boundary perhaps?
+ALIGNED(4) EWRAM_DATA bool8 gUnknown_2031DE0 = FALSE;
+EWRAM_DATA const struct CreditsOverworldCmd *gUnknown_2031DE4 = NULL;
+EWRAM_DATA s16 gUnknown_2031DE8 = 0;
+EWRAM_DATA s16 gUnknown_2031DEA = 0;
+
+// File boundary perhaps?
+EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {};
u8 CountBadgesForOverworldWhiteOutLossCalculation(void);
void Overworld_ResetStateAfterWhitingOut(void);
@@ -367,3 +382,145 @@ void LoadSaveblockMapHeader(void)
gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
gMapHeader.mapLayout = GetMapLayout();
}
+
+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;
+}
+
+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(&gFixedDiveWarp, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetWarpDestinationToDiveWarp(void)
+{
+ sWarpDestination = gFixedDiveWarp;
+}
+
+void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&gFixedHoleWarp, mapGroup, mapNum, warpId, x, y);
+}
+
+void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y)
+{
+ if (IsDummyWarp(&gFixedHoleWarp) == TRUE)
+ sWarpDestination = gLastUsedWarp;
+ else
+ SetWarpDestination(gFixedHoleWarp.mapGroup, gFixedHoleWarp.mapNum, -1, x, y);
+}
+
+void SetWarpDestinationToContinueGameWarp(void)
+{
+ sWarpDestination = gSaveBlock1Ptr->continueGameWarp;
+}
+
+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;
+}
diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c
index 86406fa2a..41427c4a5 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/post_battle_event_funcs.c
@@ -29,7 +29,7 @@ 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);
+ SetContinueGameWarpToHealLocation(SPAWN_PALLET_TOWN);
gaveAtLeastOneRibbon = FALSE;
for (i = 0, r7 = &ribbonState; i < PARTY_SIZE; i++)
{
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/sym_ewram.txt b/sym_ewram.txt
index 5b3707943..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"
-gLastUsedWarp: @ 2031DB4
- .space 0x8
-
-sWarpDestination: @ 2031DBC
- .space 0x8
-
-gFixedDiveWarp: @ 2031DC4
- .space 0x8
-
-gFixedHoleWarp: @ 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