diff options
-rw-r--r-- | asm/field_control_avatar.s | 799 | ||||
-rw-r--r-- | asm/overworld.s | 38 | ||||
-rw-r--r-- | common_syms/field_control_avatar.txt | 2 | ||||
-rw-r--r-- | include/coord_event_weather.h | 6 | ||||
-rw-r--r-- | include/event_object_movement.h | 3 | ||||
-rw-r--r-- | include/field_control_avatar.h | 4 | ||||
-rw-r--r-- | include/global.fieldmap.h | 14 | ||||
-rw-r--r-- | include/metatile_behavior.h | 4 | ||||
-rw-r--r-- | include/overworld.h | 9 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/cable_club.c | 2 | ||||
-rw-r--r-- | src/coord_event_weather.c | 66 | ||||
-rw-r--r-- | src/field_control_avatar.c | 290 | ||||
-rw-r--r-- | src/metatile_behavior.c | 4 | ||||
-rw-r--r-- | src/region_map.c | 2 | ||||
-rw-r--r-- | sym_common.txt | 11 |
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 |