Finish field_control_avatar

This commit is contained in:
PikalaxALT
2020-03-18 21:20:42 -04:00
parent 4516c63652
commit 7074900712
16 changed files with 373 additions and 882 deletions
-799
View File
@@ -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
View File
@@ -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
+2
View File
@@ -0,0 +1,2 @@
gSelectedObjectEvent
gUnknown_3005078
+6
View File
@@ -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
+2 -1
View File
@@ -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);
+2 -2
View File
@@ -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
+6 -8
View File
@@ -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;
+2 -2
View File
@@ -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
View File
@@ -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;
-1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
}
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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