summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-03-18 21:20:42 -0400
committerPikalaxALT <PikalaxALT@gmail.com>2020-03-18 21:20:42 -0400
commit7074900712c2d87e1afb4014189059ef460b2193 (patch)
tree56c494d58a559cd172b016018cb00b72f9bfb580
parent4516c63652686344160015ea91ee8729c2f355c5 (diff)
Finish field_control_avatar
-rw-r--r--asm/field_control_avatar.s799
-rw-r--r--asm/overworld.s38
-rw-r--r--common_syms/field_control_avatar.txt2
-rw-r--r--include/coord_event_weather.h6
-rw-r--r--include/event_object_movement.h3
-rw-r--r--include/field_control_avatar.h4
-rw-r--r--include/global.fieldmap.h14
-rw-r--r--include/metatile_behavior.h4
-rw-r--r--include/overworld.h9
-rw-r--r--ld_script.txt1
-rw-r--r--src/cable_club.c2
-rw-r--r--src/coord_event_weather.c66
-rw-r--r--src/field_control_avatar.c290
-rw-r--r--src/metatile_behavior.c4
-rw-r--r--src/region_map.c2
-rw-r--r--sym_common.txt11
16 files changed, 373 insertions, 882 deletions
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s
deleted file mode 100644
index 7430ea2ff..000000000
--- a/asm/field_control_avatar.s
+++ /dev/null
@@ -1,799 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start IsWarpMetatileBehavior
-IsWarpMetatileBehavior: @ 806DAF4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl MetatileBehavior_IsWarpDoor
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0806DB7C
- adds r0, r4, 0
- bl MetatileBehavior_IsLadder
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0806DB7C
- adds r0, r4, 0
- bl MetatileBehavior_IsEscalator
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0806DB7C
- adds r0, r4, 0
- bl MetatileBehavior_IsCaveDoor
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0806DB7C
- adds r0, r4, 0
- bl MetatileBehavior_IsLavaridgeB1FWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0806DB7C
- adds r0, r4, 0
- bl MetatileBehavior_IsLavaridge1FWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0806DB7C
- adds r0, r4, 0
- bl MetatileBehavior_IsWarpPad
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0806DB7C
- adds r0, r4, 0
- bl MetatileBehavior_IsFallWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0806DB7C
- adds r0, r4, 0
- bl MetatileBehavior_IsUnionRoomWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0806DB7C
- movs r0, 0
- b _0806DB7E
-_0806DB7C:
- movs r0, 0x1
-_0806DB7E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end IsWarpMetatileBehavior
-
- thumb_func_start sub_806DB84
-sub_806DB84: @ 806DB84
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0x3
- beq _0806DB98
- cmp r1, 0x4
- beq _0806DBB0
- b _0806DBD0
-_0806DB98:
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl MetatileBehavior_IsUnknownWarp6D
- lsls r0, 24
- cmp r0, 0
- bne _0806DBCC
- adds r0, r4, 0
- bl MetatileBehavior_IsUnknownWarp6F
- b _0806DBC6
-_0806DBB0:
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl MetatileBehavior_IsUnknownWarp6C
- lsls r0, 24
- cmp r0, 0
- bne _0806DBCC
- adds r0, r4, 0
- bl MetatileBehavior_IsUnknownWarp6E
-_0806DBC6:
- lsls r0, 24
- cmp r0, 0
- beq _0806DBD0
-_0806DBCC:
- movs r0, 0x1
- b _0806DBD2
-_0806DBD0:
- movs r0, 0
-_0806DBD2:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_806DB84
-
- thumb_func_start IsArrowWarpMetatileBehavior
-IsArrowWarpMetatileBehavior: @ 806DBD8
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 24
- lsrs r1, 24
- adds r2, r1, 0
- cmp r1, 0x2
- beq _0806DBFC
- cmp r1, 0x2
- bgt _0806DBF2
- cmp r1, 0x1
- beq _0806DC06
- b _0806DC28
-_0806DBF2:
- cmp r2, 0x3
- beq _0806DC10
- cmp r2, 0x4
- beq _0806DC1A
- b _0806DC28
-_0806DBFC:
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsNorthArrowWarp
- b _0806DC22
-_0806DC06:
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsSouthArrowWarp
- b _0806DC22
-_0806DC10:
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsWestArrowWarp
- b _0806DC22
-_0806DC1A:
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsEastArrowWarp
-_0806DC22:
- lsls r0, 24
- lsrs r0, 24
- b _0806DC2A
-_0806DC28:
- movs r0, 0
-_0806DC2A:
- pop {r1}
- bx r1
- thumb_func_end IsArrowWarpMetatileBehavior
-
- thumb_func_start GetWarpEventAtMapPosition
-GetWarpEventAtMapPosition: @ 806DC30
- push {lr}
- adds r3, r1, 0
- ldrh r1, [r3]
- subs r1, 0x7
- lsls r1, 16
- lsrs r1, 16
- ldrh r2, [r3, 0x2]
- subs r2, 0x7
- lsls r2, 16
- lsrs r2, 16
- ldrb r3, [r3, 0x4]
- bl map_warp_check
- lsls r0, 24
- asrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end GetWarpEventAtMapPosition
-
- thumb_func_start SetupWarp
-SetupWarp: @ 806DC54
- push {r4-r7,lr}
- adds r5, r2, 0
- ldr r0, _0806DC74 @ =gMapHeader
- ldr r0, [r0, 0x4]
- lsls r1, 24
- asrs r7, r1, 24
- lsls r6, r7, 3
- ldr r0, [r0, 0x8]
- adds r4, r0, r6
- ldrb r0, [r4, 0x6]
- cmp r0, 0x7F
- bne _0806DC78
- ldrb r0, [r4, 0x5]
- bl copy_saved_warp2_bank_and_enter_x_to_warp1
- b _0806DCC4
- .align 2, 0
-_0806DC74: .4byte gMapHeader
-_0806DC78:
- movs r0, 0x7
- ldrsb r0, [r4, r0]
- movs r1, 0x6
- ldrsb r1, [r4, r1]
- movs r2, 0x5
- ldrsb r2, [r4, r2]
- bl warp1_set_2
- movs r1, 0
- ldrsh r0, [r5, r1]
- movs r2, 0x2
- ldrsh r1, [r5, r2]
- bl sub_805550C
- ldrb r0, [r4, 0x7]
- ldrb r1, [r4, 0x6]
- bl Overworld_GetMapHeaderByGroupAndId
- ldr r1, [r0, 0x4]
- ldrb r0, [r4, 0x5]
- ldr r1, [r1, 0x8]
- lsls r0, 3
- adds r0, r1
- ldrb r0, [r0, 0x6]
- cmp r0, 0x7F
- bne _0806DCC4
- adds r0, r6, r1
- ldrb r0, [r0, 0x5]
- ldr r1, _0806DCCC @ =gSaveBlock1Ptr
- ldr r2, [r1]
- movs r1, 0x4
- ldrsb r1, [r2, r1]
- ldrb r2, [r2, 0x5]
- lsls r2, 24
- asrs r2, 24
- adds r3, r7, 0
- bl saved_warp2_set
-_0806DCC4:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0806DCCC: .4byte gSaveBlock1Ptr
- thumb_func_end SetupWarp
-
- thumb_func_start TryDoorWarp
-TryDoorWarp: @ 806DCD0
- push {r4-r7,lr}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r5, r1, 16
- lsls r2, 24
- lsrs r2, 24
- cmp r2, 0x2
- bne _0806DD30
- lsls r0, r5, 24
- lsrs r0, 24
- bl MetatileBehavior_IsWarpDoor
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806DD30
- ldr r7, _0806DD2C @ =gMapHeader
- adds r0, r7, 0
- adds r1, r6, 0
- bl GetWarpEventAtMapPosition
- lsls r0, 24
- asrs r4, r0, 24
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- beq _0806DD30
- adds r0, r5, 0
- bl IsWarpMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806DD30
- bl StoreInitialPlayerAvatarState
- adds r0, r7, 0
- adds r1, r4, 0
- adds r2, r6, 0
- bl SetupWarp
- bl DoDoorWarp
- movs r0, 0x1
- b _0806DD32
- .align 2, 0
-_0806DD2C: .4byte gMapHeader
-_0806DD30:
- movs r0, 0
-_0806DD32:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end TryDoorWarp
-
- thumb_func_start map_warp_check
-map_warp_check: @ 806DD38
- push {r4-r6,lr}
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 16
- lsrs r5, r2, 16
- lsls r3, 24
- lsrs r4, r3, 24
- ldr r0, [r0, 0x4]
- ldr r1, [r0, 0x8]
- ldrb r3, [r0, 0x1]
- movs r2, 0
- cmp r2, r3
- bge _0806DD76
-_0806DD52:
- ldrh r0, [r1]
- cmp r0, r6
- bne _0806DD6E
- ldrh r0, [r1, 0x2]
- cmp r0, r5
- bne _0806DD6E
- ldrb r0, [r1, 0x4]
- cmp r0, r4
- beq _0806DD68
- cmp r0, 0
- bne _0806DD6E
-_0806DD68:
- lsls r0, r2, 24
- asrs r0, 24
- b _0806DD7A
-_0806DD6E:
- adds r2, 0x1
- adds r1, 0x8
- cmp r2, r3
- blt _0806DD52
-_0806DD76:
- movs r0, 0x1
- negs r0, r0
-_0806DD7A:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end map_warp_check
-
- thumb_func_start trigger_activate
-trigger_activate: @ 806DD80
- push {r4,lr}
- adds r4, r0, 0
- cmp r4, 0
- beq _0806DDB6
- ldr r1, [r4, 0xC]
- cmp r1, 0
- bne _0806DD96
- ldrb r0, [r4, 0x6]
- bl trigger_activate_weather
- b _0806DDB6
-_0806DD96:
- ldrh r0, [r4, 0x6]
- cmp r0, 0
- beq _0806DDB0
- ldrh r0, [r4, 0x6]
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r4, 0x8]
- cmp r0, r1
- bne _0806DDB6
- ldr r0, [r4, 0xC]
- b _0806DDB8
-_0806DDB0:
- adds r0, r1, 0
- bl ScriptContext2_RunNewScript
-_0806DDB6:
- movs r0, 0
-_0806DDB8:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end trigger_activate
-
- thumb_func_start GetCoordEventScriptAtPosition
-GetCoordEventScriptAtPosition: @ 806DDC0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- lsls r2, 16
- lsrs r2, 16
- mov r9, r2
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- ldr r0, [r0, 0x4]
- ldr r1, [r0, 0xC]
- ldrb r7, [r0, 0x2]
- movs r6, 0
- cmp r6, r7
- bge _0806DE16
- adds r5, r1, 0
- adds r4, r5, 0
-_0806DDEC:
- ldrh r0, [r4]
- cmp r0, r10
- bne _0806DE0C
- ldrh r0, [r4, 0x2]
- cmp r0, r9
- bne _0806DE0C
- ldrb r0, [r4, 0x4]
- cmp r0, r8
- beq _0806DE02
- cmp r0, 0
- bne _0806DE0C
-_0806DE02:
- adds r0, r5, 0
- bl trigger_activate
- cmp r0, 0
- bne _0806DE18
-_0806DE0C:
- adds r4, 0x10
- adds r5, 0x10
- adds r6, 0x1
- cmp r6, r7
- blt _0806DDEC
-_0806DE16:
- movs r0, 0
-_0806DE18:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetCoordEventScriptAtPosition
-
- thumb_func_start sub_806DE28
-sub_806DE28: @ 806DE28
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- movs r2, 0x12
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- cmp r0, 0x66
- bne _0806DE64
- movs r0, 0x25
- bl PlaySE
- ldrb r0, [r5, 0x8]
- ldr r4, _0806DE6C @ =gSaveBlock1Ptr
- ldr r2, [r4]
- ldrb r1, [r2, 0x5]
- ldrb r2, [r2, 0x4]
- bl RemoveObjectEventByLocalIdAndMap
- ldrb r0, [r5, 0x8]
- ldr r2, [r4]
- ldrb r1, [r2, 0x5]
- ldrb r2, [r2, 0x4]
- bl sub_805FCD8
- lsls r0, 16
- lsrs r0, 16
- bl FlagClear
-_0806DE64:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806DE6C: .4byte gSaveBlock1Ptr
- thumb_func_end sub_806DE28
-
- thumb_func_start sub_806DE70
-sub_806DE70: @ 806DE70
- push {r4-r7,lr}
- lsls r0, 16
- lsls r1, 16
- ldr r2, _0806DEC0 @ =gMapHeader
- ldr r2, [r2, 0x4]
- ldr r4, [r2, 0xC]
- ldrb r5, [r2, 0x2]
- lsrs r7, r0, 16
- asrs r0, 16
- lsrs r6, r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- cmp r0, 0x20
- bne _0806DEB8
- cmp r5, 0
- beq _0806DEB8
-_0806DE92:
- ldrh r0, [r4]
- adds r0, 0x7
- cmp r0, r7
- bne _0806DEB0
- ldrh r0, [r4, 0x2]
- adds r0, 0x7
- cmp r0, r6
- bne _0806DEB0
- bl sub_8112364
- ldr r0, [r4, 0xC]
- bl ScriptContext1_SetupScript
- bl ScriptContext2_Enable
-_0806DEB0:
- adds r4, 0x10
- subs r5, 0x1
- cmp r5, 0
- bne _0806DE92
-_0806DEB8:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0806DEC0: .4byte gMapHeader
- thumb_func_end sub_806DE70
-
- thumb_func_start sub_806DEC4
-sub_806DEC4: @ 806DEC4
- push {r4,lr}
- ldr r4, _0806DEE8 @ =gMapHeader
- ldrh r1, [r0]
- subs r1, 0x7
- lsls r1, 16
- lsrs r1, 16
- ldrh r2, [r0, 0x2]
- subs r2, 0x7
- lsls r2, 16
- lsrs r2, 16
- ldrb r3, [r0, 0x4]
- adds r0, r4, 0
- bl GetCoordEventScriptAtPosition
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0806DEE8: .4byte gMapHeader
- thumb_func_end sub_806DEC4
-
- thumb_func_start GetBackgroundEventAtPosition
-GetBackgroundEventAtPosition: @ 806DEEC
- push {r4-r7,lr}
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r2, 16
- lsrs r6, r2, 16
- lsls r3, 24
- lsrs r5, r3, 24
- ldr r0, [r0, 0x4]
- ldr r4, [r0, 0x10]
- ldrb r3, [r0, 0x3]
- movs r2, 0
- cmp r2, r3
- bcs _0806DF32
-_0806DF06:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r4
- ldrh r0, [r1]
- cmp r0, r7
- bne _0806DF28
- ldrh r0, [r1, 0x2]
- cmp r0, r6
- bne _0806DF28
- ldrb r0, [r1, 0x4]
- cmp r0, r5
- beq _0806DF24
- cmp r0, 0
- bne _0806DF28
-_0806DF24:
- adds r0, r1, 0
- b _0806DF34
-_0806DF28:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, r3
- bcc _0806DF06
-_0806DF32:
- movs r0, 0
-_0806DF34:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetBackgroundEventAtPosition
-
- thumb_func_start dive_warp
-dive_warp: @ 806DF3C
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r5, r1, 16
- ldr r0, _0806DF70 @ =gMapHeader
- ldrb r0, [r0, 0x17]
- cmp r0, 0x5
- bne _0806DF74
- lsls r0, r5, 24
- lsrs r0, 24
- bl MetatileBehavior_IsMB19
- lsls r0, 24
- cmp r0, 0
- bne _0806DF74
- ldrh r0, [r4]
- subs r0, 0x7
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r4, 0x2]
- subs r1, 0x7
- lsls r1, 16
- lsrs r1, 16
- bl sub_8055824
- b _0806DF98
- .align 2, 0
-_0806DF70: .4byte gMapHeader
-_0806DF74:
- lsls r0, r5, 24
- lsrs r0, 24
- bl MetatileBehavior_IsDeepOrSemiDeepWater
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806DFB0
- ldrh r0, [r4]
- subs r0, 0x7
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r4, 0x2]
- subs r1, 0x7
- lsls r1, 16
- lsrs r1, 16
- bl sub_8055844
-_0806DF98:
- lsls r0, 24
- cmp r0, 0
- beq _0806DFB0
- bl StoreInitialPlayerAvatarState
- bl DoDiveWarp
- movs r0, 0xE2
- bl PlaySE
- movs r0, 0x1
- b _0806DFB2
-_0806DFB0:
- movs r0, 0
-_0806DFB2:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end dive_warp
-
- thumb_func_start sub_806DFB8
-sub_806DFB8: @ 806DFB8
- push {r4,r5,lr}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0806E010 @ =gMapHeader
- ldrb r0, [r0, 0x17]
- cmp r0, 0x5
- bne _0806E014
- adds r0, r5, 0
- bl MetatileBehavior_IsMB19
- lsls r0, 24
- cmp r0, 0
- bne _0806E014
- mov r0, sp
- ldrh r0, [r0]
- subs r0, 0x7
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r4]
- subs r1, 0x7
- lsls r1, 16
- lsrs r1, 16
- bl sub_8055824
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806E044
- movs r0, 0x1
- b _0806E046
- .align 2, 0
-_0806E010: .4byte gMapHeader
-_0806E014:
- adds r0, r5, 0
- bl MetatileBehavior_IsDeepOrSemiDeepWater
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806E044
- mov r0, sp
- ldrh r0, [r0]
- subs r0, 0x7
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r4]
- subs r1, 0x7
- lsls r1, 16
- lsrs r1, 16
- bl sub_8055844
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806E044
- movs r0, 0x2
- b _0806E046
-_0806E044:
- movs r0, 0
-_0806E046:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_806DFB8
-
- thumb_func_start GetObjectEventScriptPointerForComparison
-GetObjectEventScriptPointerForComparison: @ 806E050
- push {r4,r5,lr}
- sub sp, 0x8
- bl GetPlayerMovementDirection
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- mov r5, sp
- mov r0, sp
- bl GetInFrontOfPlayerPosition
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0x2
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, sp
- adds r2, r4, 0
- bl GetInteractedObjectEventScript
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end GetObjectEventScriptPointerForComparison
-
- thumb_func_start SetCableClubWarp
-SetCableClubWarp: @ 806E08C
- push {r4,lr}
- sub sp, 0x8
- bl GetPlayerMovementDirection
- mov r4, sp
- mov r0, sp
- bl GetPlayerPosition
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- ldr r4, _0806E0CC @ =gMapHeader
- adds r0, r4, 0
- mov r1, sp
- bl GetWarpEventAtMapPosition
- adds r1, r0, 0
- lsls r1, 24
- asrs r1, 24
- adds r0, r4, 0
- mov r2, sp
- bl SetupWarp
- movs r0, 0
- add sp, 0x8
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0806E0CC: .4byte gMapHeader
- thumb_func_end SetCableClubWarp
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/overworld.s b/asm/overworld.s
index 88b11ea80..03051d691 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -1036,8 +1036,8 @@ SetWarpDestination: @ 805538C
_080553C4: .4byte gUnknown_2031DBC
thumb_func_end SetWarpDestination
- thumb_func_start warp1_set_2
-warp1_set_2: @ 80553C8
+ thumb_func_start SetWarpDestinationToMapWarp
+SetWarpDestinationToMapWarp: @ 80553C8
push {lr}
sub sp, 0x4
lsls r0, 24
@@ -1053,10 +1053,10 @@ warp1_set_2: @ 80553C8
add sp, 0x4
pop {r0}
bx r0
- thumb_func_end warp1_set_2
+ thumb_func_end SetWarpDestinationToMapWarp
- thumb_func_start saved_warp2_set
-saved_warp2_set: @ 80553E8
+ thumb_func_start SetDynamicWarp
+SetDynamicWarp: @ 80553E8
push {r4,r5,lr}
sub sp, 0x8
ldr r0, _08055418 @ =gSaveBlock1Ptr
@@ -1082,7 +1082,7 @@ saved_warp2_set: @ 80553E8
bx r0
.align 2, 0
_08055418: .4byte gSaveBlock1Ptr
- thumb_func_end saved_warp2_set
+ thumb_func_end SetDynamicWarp
thumb_func_start SetDynamicWarpWithCoords
SetDynamicWarpWithCoords: @ 805541C
@@ -1114,8 +1114,8 @@ SetDynamicWarpWithCoords: @ 805541C
_08055450: .4byte gSaveBlock1Ptr
thumb_func_end SetDynamicWarpWithCoords
- thumb_func_start copy_saved_warp2_bank_and_enter_x_to_warp1
-copy_saved_warp2_bank_and_enter_x_to_warp1: @ 8055454
+ thumb_func_start SetWarpDestinationToDynamicWarp
+SetWarpDestinationToDynamicWarp: @ 8055454
ldr r2, _08055464 @ =gUnknown_2031DBC
ldr r0, _08055468 @ =gSaveBlock1Ptr
ldr r0, [r0]
@@ -1127,7 +1127,7 @@ copy_saved_warp2_bank_and_enter_x_to_warp1: @ 8055454
.align 2, 0
_08055464: .4byte gUnknown_2031DBC
_08055468: .4byte gSaveBlock1Ptr
- thumb_func_end copy_saved_warp2_bank_and_enter_x_to_warp1
+ thumb_func_end SetWarpDestinationToDynamicWarp
thumb_func_start sub_805546C
sub_805546C: @ 805546C
@@ -1220,8 +1220,8 @@ _08055500:
_08055508: .4byte gSaveBlock1Ptr
thumb_func_end SetLastHealLocationWarp
- thumb_func_start sub_805550C
-sub_805550C: @ 805550C
+ thumb_func_start UpdateEscapeWarp
+UpdateEscapeWarp: @ 805550C
push {r4-r7,lr}
sub sp, 0x4
lsls r0, 16
@@ -1290,7 +1290,7 @@ _08055590:
.align 2, 0
_08055598: .4byte gUnknown_2031DBC
_0805559C: .4byte gSaveBlock1Ptr
- thumb_func_end sub_805550C
+ thumb_func_end UpdateEscapeWarp
thumb_func_start SetEscapeWarp
SetEscapeWarp: @ 80555A0
@@ -1650,8 +1650,8 @@ _0805581A:
bx r1
thumb_func_end sub_80557C4
- thumb_func_start sub_8055824
-sub_8055824: @ 8055824
+ thumb_func_start SetDiveWarpEmerge
+SetDiveWarpEmerge: @ 8055824
push {lr}
adds r3, r0, 0
adds r2, r1, 0
@@ -1666,10 +1666,10 @@ sub_8055824: @ 8055824
lsrs r0, 24
pop {r1}
bx r1
- thumb_func_end sub_8055824
+ thumb_func_end SetDiveWarpEmerge
- thumb_func_start sub_8055844
-sub_8055844: @ 8055844
+ thumb_func_start SetDiveWarpDive
+SetDiveWarpDive: @ 8055844
push {lr}
adds r3, r0, 0
adds r2, r1, 0
@@ -1684,7 +1684,7 @@ sub_8055844: @ 8055844
lsrs r0, 24
pop {r1}
bx r1
- thumb_func_end sub_8055844
+ thumb_func_end SetDiveWarpDive
thumb_func_start sub_8055864
sub_8055864: @ 8055864
@@ -6694,7 +6694,7 @@ sub_805801C: @ 805801C
cmp r0, 0x2
bne _0805802E
adds r0, r1, 0x4
- bl sub_806DEC4
+ bl GetCoordEventScriptAtMapPosition
b _08058030
_0805802E:
movs r0, 0
diff --git a/common_syms/field_control_avatar.txt b/common_syms/field_control_avatar.txt
new file mode 100644
index 000000000..a9912f983
--- /dev/null
+++ b/common_syms/field_control_avatar.txt
@@ -0,0 +1,2 @@
+gSelectedObjectEvent
+gUnknown_3005078
diff --git a/include/coord_event_weather.h b/include/coord_event_weather.h
new file mode 100644
index 000000000..4996b52a6
--- /dev/null
+++ b/include/coord_event_weather.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_COORD_EVENT_WEATHER_H
+#define GUARD_COORD_EVENT_WEATHER_H
+
+void DoCoordEventWeather(u8 weatherId);
+
+#endif //GUARD_COORD_EVENT_WEATHER_H
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index ac102d9a9..e01364e55 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -63,7 +63,8 @@ bool8 TryGetObjectEventIdByLocalIdAndMap(u8, u8, u8, u8 *);
u8 GetObjectEventIdByXY(s16, s16);
void SetObjectEventDirection(struct ObjectEvent *, u8);
u8 sub_808D4F4(void);
-void RemoveObjectEventByLocalIdAndMap(u8, u8, u8);
+void RemoveObjectEventByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup);
+u16 sub_805FCD8(u8 localId, u8 mapNum, u8 mapGroup);
void LoadPlayerObjectReflectionPalette(u16, u8);
void LoadSpecialObjectReflectionPalette(u16, u8);
void TryMoveObjectEventToMapCoords(u8, u8, u8, s16, s16);
diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h
index 587586746..e507f702f 100644
--- a/include/field_control_avatar.h
+++ b/include/field_control_avatar.h
@@ -25,8 +25,8 @@ extern struct FieldInput gUnknown_3005078;
void RestartWildEncounterImmunitySteps(void);
void ClearPoisonStepCounter(void);
-void SetCableClubWarp(void);
+int SetCableClubWarp(void);
void sub_806DE28(struct ObjectEvent *);
-void dive_warp(struct MapPosition * pos, u16 behavior);
+bool8 dive_warp(struct MapPosition * pos, u16 behavior);
#endif //GUARD_FIELD_CONTROL_AVATAR_H
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 2d7dc104e..3c4b5f382 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -110,20 +110,18 @@ struct ObjectEventTemplate
struct WarpEvent
{
s16 x, y;
- s8 warpId;
- u8 mapGroup;
+ u8 elevation;
+ u8 warpId;
u8 mapNum;
- u8 unk7;
+ u8 mapGroup;
};
struct CoordEvent
{
- s16 x, y;
- u8 unk4;
- u8 filler_5;
+ u16 x, y;
+ u8 elevation;
u16 trigger;
u16 index;
- u8 filler_A[0x2];
u8 *script;
};
@@ -152,7 +150,7 @@ union BgUnion
struct BgEvent
{
u16 x, y;
- u8 unk4;
+ u8 elevation;
u8 kind;
// 0x2 padding for the union beginning.
union BgUnion bgUnion;
diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h
index 2ae011e5f..ae3e6a01d 100644
--- a/include/metatile_behavior.h
+++ b/include/metatile_behavior.h
@@ -62,8 +62,8 @@ bool8 MetatileBehavior_UnusedIsMB_01(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedIsTallGrass(u8 metatileBehavior);
bool8 MetatileBehavior_IsIndoorEncounter(u8 metatileBehavior);
bool8 MetatileBehavior_IsMountain(u8 metatileBehavior);
-bool8 MetatileBehavior_IsDeepOrSemiDeepWater(u8 metatileBehavior);
-bool8 MetatileBehavior_IsMB19(u8 metatileBehavior);
+bool8 MetatileBehavior_IsDiveable(u8 metatileBehavior);
+bool8 MetatileBehavior_IsUnableToEmerge(u8 metatileBehavior);
bool8 MetatileBehavior_IsShallowFlowingWater(u8 metatileBehavior);
bool8 MetatileBehavior_IsThinIce(u8 metatileBehavior);
bool8 MetatileBehavior_IsCrackedIce(u8 metatileBehavior);
diff --git a/include/overworld.h b/include/overworld.h
index 546c4f00e..bd4dda9b6 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -72,7 +72,7 @@ void Overworld_SetMapObjTemplateMovementType(u8, u8);
void SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
-void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId);
+void SetDynamicWarp(int unused, s8 mapGroup, s8 mapNum, s8 warpId);
void SetDynamicWarpWithCoords(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
@@ -110,9 +110,9 @@ 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);
-void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpNum);
+void SetWarpDestinationToMapWarp(s8 mapGroup, s8 mapNum, s8 warpNum);
void c2_load_new_map(void);
-void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused);
+void SetWarpDestinationToDynamicWarp(u8 unused);
void mapldr_default(void);
u32 GetGameStat(u8 statId);
@@ -195,6 +195,9 @@ void CB1_Overworld(void);
void sub_80568C4(void);
u8 GetLastUsedWarpMapSectionId(void);
void StoreInitialPlayerAvatarState(void);
+void UpdateEscapeWarp(s16 x, s16 y);
+bool8 SetDiveWarpEmerge(u16 x, u16 y);
+bool8 SetDiveWarpDive(u16 x, u16 y);
extern u16 *gBGTilemapBuffers1;
extern u16 *gBGTilemapBuffers2;
diff --git a/ld_script.txt b/ld_script.txt
index 203cab28f..c92132b90 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -100,7 +100,6 @@ SECTIONS {
src/script.o(.text);
src/scrcmd.o(.text);
src/field_control_avatar.o(.text);
- asm/field_control_avatar.o(.text);
src/event_data.o(.text);
src/coord_event_weather.o(.text);
src/field_tasks.o(.text);
diff --git a/src/cable_club.c b/src/cable_club.c
index b7f9b9114..bc41ca4f6 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -762,7 +762,7 @@ void CleanupLinkRoomState(void)
LoadPlayerParty();
SavePlayerBag();
}
- copy_saved_warp2_bank_and_enter_x_to_warp1(127);
+ SetWarpDestinationToDynamicWarp(127);
}
void ExitLinkRoom(void)
diff --git a/src/coord_event_weather.c b/src/coord_event_weather.c
index 4dbdd574b..ca1da728d 100644
--- a/src/coord_event_weather.c
+++ b/src/coord_event_weather.c
@@ -1,46 +1,48 @@
#include "global.h"
+#include "constants/weather.h"
-void nullsub_27(void) {}
-void nullsub_28(void) {}
-void nullsub_29(void) {}
-void nullsub_30(void) {}
-void nullsub_31(void) {}
-void nullsub_32(void) {}
-void nullsub_33(void) {}
-void nullsub_34(void) {}
-void nullsub_35(void) {}
-void nullsub_36(void) {}
-void nullsub_37(void) {}
-void nullsub_38(void) {}
-void nullsub_39(void) {}
+// These were all dummied out because it's always sunny in Viridian
+void WeatherCoordEvent_SunnyClouds(void) {}
+void WeatherCoordEvent_Sunny(void) {}
+void WeatherCoordEvent_Rain(void) {}
+void WeatherCoordEvent_Snow(void) {}
+void WeatherCoordEvent_RainThunderstorm(void) {}
+void WeatherCoordEvent_FogHorizontal(void) {}
+void WeatherCoordEvent_VolcanicAsh(void) {}
+void WeatherCoordEvent_Sandstorm(void) {}
+void WeatherCoordEvent_FogDiagonal(void) {}
+void WeatherCoordEvent_Underwater(void) {}
+void WeatherCoordEvent_Shade(void) {}
+void WeatherCoordEvent_Route119Cycle(void) {}
+void WeatherCoordEvent_Route123Cycle(void) {}
-struct {
+static struct {
u8 weatherId;
void (*callback)(void);
-} const gUnknown_83A72A8[] = {
- {0x01, nullsub_27},
- {0x02, nullsub_28},
- {0x03, nullsub_29},
- {0x04, nullsub_30},
- {0x05, nullsub_31},
- {0x06, nullsub_32},
- {0x07, nullsub_33},
- {0x08, nullsub_34},
- {0x09, nullsub_35},
- {0x0a, nullsub_36},
- {0x0b, nullsub_37},
- {0x14, nullsub_38},
- {0x15, nullsub_39}
+} const sWeatherCoordEventFuncs[] = {
+ {WEATHER_SUNNY_CLOUDS, WeatherCoordEvent_SunnyClouds },
+ {WEATHER_SUNNY, WeatherCoordEvent_Sunny },
+ {WEATHER_RAIN, WeatherCoordEvent_Rain },
+ {WEATHER_SNOW, WeatherCoordEvent_Snow },
+ {WEATHER_RAIN_THUNDERSTORM, WeatherCoordEvent_RainThunderstorm},
+ {WEATHER_FOG_HORIZONTAL, WeatherCoordEvent_FogHorizontal },
+ {WEATHER_VOLCANIC_ASH, WeatherCoordEvent_VolcanicAsh },
+ {WEATHER_SANDSTORM, WeatherCoordEvent_Sandstorm },
+ {WEATHER_FOG_DIAGONAL, WeatherCoordEvent_FogDiagonal },
+ {WEATHER_UNDERWATER, WeatherCoordEvent_Underwater },
+ {WEATHER_SHADE, WeatherCoordEvent_Shade },
+ {WEATHER_ROUTE119_CYCLE, WeatherCoordEvent_Route119Cycle },
+ {WEATHER_ROUTE123_CYCLE, WeatherCoordEvent_Route123Cycle }
};
-void trigger_activate_weather(u8 weatherId)
+void DoCoordEventWeather(u8 weatherId)
{
u8 i;
- for (i = 0; i < NELEMS(gUnknown_83A72A8); i++)
+ for (i = 0; i < NELEMS(sWeatherCoordEventFuncs); i++)
{
- if (gUnknown_83A72A8[i].weatherId == weatherId)
+ if (sWeatherCoordEventFuncs[i].weatherId == weatherId)
{
- gUnknown_83A72A8[i].callback();
+ sWeatherCoordEventFuncs[i].callback();
return;
}
}
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index 3dfed44fd..35fbbbe33 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "gflib.h"
#include "bike.h"
+#include "coord_event_weather.h"
#include "daycare.h"
#include "event_data.h"
#include "event_object_movement.h"
@@ -28,6 +29,7 @@
#include "constants/event_bg.h"
#include "constants/event_objects.h"
#include "constants/maps.h"
+#include "constants/metatile_behaviors.h"
void sub_806CA4C(struct FieldInput *input, u16 *newKeys, u16 *heldKeys);
bool8 sub_80699D4(void);
@@ -60,9 +62,11 @@ bool8 sub_806DB84(u16 metatileBehavior, u8 playerDirection);
void SetupWarp(struct MapHeader * mapHeader, s8 warpId, struct MapPosition * position);
bool8 IsArrowWarpMetatileBehavior(u16 metatileBehavior, u8 playerDirection);
s8 GetWarpEventAtMapPosition(struct MapHeader * mapHeader, struct MapPosition * mapPosition);
-const u8 *GetCoordEventScriptAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z);
bool8 TryDoorWarp(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection);
+s8 GetWarpEventAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z);
+const u8 *GetCoordEventScriptAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z);
+u8 gSelectedObjectEvent;
struct FieldInput gUnknown_3005078;
void FieldClearPlayerInput(struct FieldInput *input)
@@ -889,3 +893,287 @@ bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileBehavior
}
return FALSE;
}
+
+bool8 IsWarpMetatileBehavior(u16 metatileBehavior)
+{
+ if (MetatileBehavior_IsWarpDoor(metatileBehavior) == TRUE)
+ return TRUE;
+ if (MetatileBehavior_IsLadder(metatileBehavior) == TRUE)
+ return TRUE;
+ if (MetatileBehavior_IsEscalator(metatileBehavior) == TRUE)
+ return TRUE;
+ if (MetatileBehavior_IsCaveDoor(metatileBehavior) == TRUE)
+ return TRUE;
+ if (MetatileBehavior_IsLavaridgeB1FWarp(metatileBehavior) == TRUE)
+ return TRUE;
+ if (MetatileBehavior_IsLavaridge1FWarp(metatileBehavior) == TRUE)
+ return TRUE;
+ if (MetatileBehavior_IsWarpPad(metatileBehavior) == TRUE)
+ return TRUE;
+ if (MetatileBehavior_IsFallWarp(metatileBehavior) == TRUE)
+ return TRUE;
+ if (MetatileBehavior_IsUnionRoomWarp(metatileBehavior) == TRUE)
+ return TRUE;
+ return FALSE;
+}
+
+bool8 sub_806DB84(u16 metatileBehavior, u8 playerDirection)
+{
+ switch (playerDirection)
+ {
+ case DIR_WEST:
+ if (MetatileBehavior_IsUnknownWarp6D(metatileBehavior))
+ return TRUE;
+ if (MetatileBehavior_IsUnknownWarp6F(metatileBehavior))
+ return TRUE;
+ break;
+ case DIR_EAST:
+ if (MetatileBehavior_IsUnknownWarp6C(metatileBehavior))
+ return TRUE;
+ if (MetatileBehavior_IsUnknownWarp6E(metatileBehavior))
+ return TRUE;
+ break;
+ }
+ return FALSE;
+}
+
+bool8 IsArrowWarpMetatileBehavior(u16 metatileBehavior, u8 direction)
+{
+ switch (direction)
+ {
+ case DIR_NORTH:
+ return MetatileBehavior_IsNorthArrowWarp(metatileBehavior);
+ case DIR_SOUTH:
+ return MetatileBehavior_IsSouthArrowWarp(metatileBehavior);
+ case DIR_WEST:
+ return MetatileBehavior_IsWestArrowWarp(metatileBehavior);
+ case DIR_EAST:
+ return MetatileBehavior_IsEastArrowWarp(metatileBehavior);
+ }
+ return FALSE;
+}
+
+s8 GetWarpEventAtMapPosition(struct MapHeader *mapHeader, struct MapPosition *position)
+{
+ return GetWarpEventAtPosition(mapHeader, position->x - 7, position->y - 7, position->height);
+}
+
+void SetupWarp(struct MapHeader *unused, s8 warpEventId, struct MapPosition *position)
+{
+ const struct WarpEvent *warpEvent;
+
+ warpEvent = &gMapHeader.events->warps[warpEventId];
+
+ if (warpEvent->mapNum == MAP_NUM(NONE))
+ {
+ SetWarpDestinationToDynamicWarp(warpEvent->warpId);
+ }
+ else
+ {
+ const struct MapHeader *mapHeader;
+
+ SetWarpDestinationToMapWarp(warpEvent->mapGroup, warpEvent->mapNum, warpEvent->warpId);
+ UpdateEscapeWarp(position->x, position->y);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(warpEvent->mapGroup, warpEvent->mapNum);
+ if (mapHeader->events->warps[warpEvent->warpId].mapNum == MAP_NUM(NONE))
+ SetDynamicWarp(mapHeader->events->warps[warpEventId].warpId, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, warpEventId);
+ }
+}
+
+bool8 TryDoorWarp(struct MapPosition *position, u16 metatileBehavior, u8 direction)
+{
+ s8 warpEventId;
+
+ if (direction == DIR_NORTH)
+ {
+ if (MetatileBehavior_IsWarpDoor(metatileBehavior) == TRUE)
+ {
+ warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position);
+ if (warpEventId != -1 && IsWarpMetatileBehavior(metatileBehavior) == TRUE)
+ {
+ StoreInitialPlayerAvatarState();
+ SetupWarp(&gMapHeader, warpEventId, position);
+ DoDoorWarp();
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+s8 GetWarpEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation)
+{
+ s32 i;
+ struct WarpEvent *warpEvent = mapHeader->events->warps;
+ u8 warpCount = mapHeader->events->warpCount;
+
+ for (i = 0; i < warpCount; i++, warpEvent++)
+ {
+ if ((u16)warpEvent->x == x && (u16)warpEvent->y == y)
+ {
+ if (warpEvent->elevation == elevation || warpEvent->elevation == 0)
+ return i;
+ }
+ }
+ return -1;
+}
+
+const u8 *TryRunCoordEventScript(struct CoordEvent *coordEvent)
+{
+ if (coordEvent != NULL)
+ {
+ if (coordEvent->script == NULL)
+ {
+ DoCoordEventWeather(coordEvent->trigger);
+ return NULL;
+ }
+ if (coordEvent->trigger == 0)
+ {
+ ScriptContext2_RunNewScript(coordEvent->script);
+ return NULL;
+ }
+ if (VarGet(coordEvent->trigger) == (u8)coordEvent->index)
+ return coordEvent->script;
+ }
+ return NULL;
+}
+
+const u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation)
+{
+ s32 i;
+ struct CoordEvent *coordEvents = mapHeader->events->coordEvents;
+ u8 coordEventCount = mapHeader->events->coordEventCount;
+
+ for (i = 0; i < coordEventCount; i++)
+ {
+ if ((u16)coordEvents[i].x == x && (u16)coordEvents[i].y == y)
+ {
+ if (coordEvents[i].elevation == elevation || coordEvents[i].elevation == 0)
+ {
+ const u8 *script = TryRunCoordEventScript(&coordEvents[i]);
+ if (script != NULL)
+ return script;
+ }
+ }
+ }
+ return NULL;
+}
+
+void sub_806DE28(struct ObjectEvent * object)
+{
+ if (MapGridGetMetatileBehaviorAt(object->currentCoords.x, object->currentCoords.y) == MB_FALL_WARP)
+ {
+ PlaySE(SE_RU_HYUU);
+ // w-why?!
+ RemoveObjectEventByLocalIdAndMap(object->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
+ FlagClear(sub_805FCD8(object->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup));
+ }
+}
+
+void sub_806DE70(u16 x, u16 y)
+{
+ int i;
+ const struct CoordEvent * events = gMapHeader.events->coordEvents;
+ int n = gMapHeader.events->coordEventCount;
+
+ if (MapGridGetMetatileBehaviorAt(x, y) == MB_STRENGTH_BUTTON)
+ {
+ for (i = 0; i < n; i++)
+ {
+ if (events[i].x + 7 == x && events[i].y + 7 == y)
+ {
+ sub_8112364();
+ ScriptContext1_SetupScript(events[i].script);
+ ScriptContext2_Enable();
+ }
+ }
+ }
+}
+
+const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position)
+{
+ return GetCoordEventScriptAtPosition(&gMapHeader, position->x - 7, position->y - 7, position->height);
+}
+
+const struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation)
+{
+ u8 i;
+ struct BgEvent *bgEvents = mapHeader->events->bgEvents;
+ u8 bgEventCount = mapHeader->events->bgEventCount;
+
+ for (i = 0; i < bgEventCount; i++)
+ {
+ if ((u16)bgEvents[i].x == x && (u16)bgEvents[i].y == y)
+ {
+ if (bgEvents[i].elevation == elevation || bgEvents[i].elevation == 0)
+ return &bgEvents[i];
+ }
+ }
+ return NULL;
+}
+
+bool8 dive_warp(struct MapPosition *position, u16 metatileBehavior)
+{
+ if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && !MetatileBehavior_IsUnableToEmerge(metatileBehavior))
+ {
+ if (SetDiveWarpEmerge(position->x - 7, position->y - 7))
+ {
+ StoreInitialPlayerAvatarState();
+ DoDiveWarp();
+ PlaySE(SE_W291);
+ return TRUE;
+ }
+ }
+ else if (MetatileBehavior_IsDiveable(metatileBehavior) == TRUE)
+ {
+ if (SetDiveWarpDive(position->x - 7, position->y - 7))
+ {
+ StoreInitialPlayerAvatarState();
+ DoDiveWarp();
+ PlaySE(SE_W291);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+u8 TrySetDiveWarp(void)
+{
+ s16 x, y;
+ u8 metatileBehavior;
+
+ PlayerGetDestCoords(&x, &y);
+ metatileBehavior = MapGridGetMetatileBehaviorAt(x, y);
+ if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && !MetatileBehavior_IsUnableToEmerge(metatileBehavior))
+ {
+ if (SetDiveWarpEmerge(x - 7, y - 7) == TRUE)
+ return 1;
+ }
+ else if (MetatileBehavior_IsDiveable(metatileBehavior) == TRUE)
+ {
+ if (SetDiveWarpDive(x - 7, y - 7) == TRUE)
+ return 2;
+ }
+ return 0;
+}
+
+const u8 *GetObjectEventScriptPointerPlayerFacing(void)
+{
+ u8 direction;
+ struct MapPosition position;
+
+ direction = GetPlayerMovementDirection();
+ GetInFrontOfPlayerPosition(&position);
+ return GetInteractedObjectEventScript(&position, MapGridGetMetatileBehaviorAt(position.x, position.y), direction);
+}
+
+int SetCableClubWarp(void)
+{
+ struct MapPosition position;
+
+ GetPlayerMovementDirection(); //unnecessary
+ GetPlayerPosition(&position);
+ MapGridGetMetatileBehaviorAt(position.x, position.y); //unnecessary
+ SetupWarp(&gMapHeader, GetWarpEventAtMapPosition(&gMapHeader, &position), &position);
+ return 0;
+}
diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c
index fdcb25105..d6a983744 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -474,7 +474,7 @@ bool8 MetatileBehavior_IsMountain(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsDeepOrSemiDeepWater(u8 metatileBehavior)
+bool8 MetatileBehavior_IsDiveable(u8 metatileBehavior)
{
if(metatileBehavior >= MB_SEMI_DEEP_WATER && metatileBehavior <= MB_DEEP_WATER)
return TRUE;
@@ -482,7 +482,7 @@ bool8 MetatileBehavior_IsDeepOrSemiDeepWater(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsMB19(u8 metatileBehavior)
+bool8 MetatileBehavior_IsUnableToEmerge(u8 metatileBehavior)
{
if(metatileBehavior == MB_19)
return TRUE;
diff --git a/src/region_map.c b/src/region_map.c
index 731abc59f..b49c3c31a 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -4393,7 +4393,7 @@ static void sub_80C527C(u16 mapsec)
}
else
{
- warp1_set_2(sMapsecToSpawn[idx][0], sMapsecToSpawn[idx][1], -1);
+ SetWarpDestinationToMapWarp(sMapsecToSpawn[idx][0], sMapsecToSpawn[idx][1], -1);
}
ReturnToFieldFromFlyMapSelect();
}
diff --git a/sym_common.txt b/sym_common.txt
index 1865bcbc4..2a03004de 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -47,21 +47,12 @@ gFieldLinkPlayerCount: @ 3005030
.align 4
.include "fieldmap.o"
-
.align 4
.include "field_camera.o"
-
.align 2
.include "scrcmd.o"
-
.align 2
- @ .include "field_control_avatar.o"
-gSelectedObjectEvent: @ 3005074
- .space 0x4
-
-gUnknown_3005078: @ 3005078
- .space 0x4
-
+ .include "field_control_avatar.o"
.align 2
.include "event_data.o"
.align 2