Finish field_control_avatar
This commit is contained in:
@@ -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.
|
||||
+19
-19
@@ -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
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
gSelectedObjectEvent
|
||||
gUnknown_3005078
|
||||
@@ -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
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
+6
-3
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
+1
-1
@@ -762,7 +762,7 @@ void CleanupLinkRoomState(void)
|
||||
LoadPlayerParty();
|
||||
SavePlayerBag();
|
||||
}
|
||||
copy_saved_warp2_bank_and_enter_x_to_warp1(127);
|
||||
SetWarpDestinationToDynamicWarp(127);
|
||||
}
|
||||
|
||||
void ExitLinkRoom(void)
|
||||
|
||||
+34
-32
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+289
-1
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
+1
-1
@@ -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();
|
||||
}
|
||||
|
||||
+1
-10
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user