summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/overworld.s775
-rw-r--r--data/maps/CinnabarIsland/scripts.inc2
-rw-r--r--data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc2
-rw-r--r--data/maps/PalletTown/scripts.inc2
-rw-r--r--data/maps/PalletTown_ProfessorOaksLab/scripts.inc2
-rw-r--r--include/constants/flags.h2
-rw-r--r--include/field_screen_effect.h2
-rw-r--r--include/global.fieldmap.h11
-rw-r--r--include/m4a.h2
-rw-r--r--include/metatile_behavior.h2
-rw-r--r--include/overworld.h4
-rw-r--r--src/cable_club.c2
-rw-r--r--src/field_tasks.c2
-rw-r--r--src/metatile_behavior.c2
-rw-r--r--src/overworld.c300
15 files changed, 319 insertions, 793 deletions
diff --git a/asm/overworld.s b/asm/overworld.s
index e80494b70..7ac5c3e06 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -5,781 +5,6 @@
.text
- thumb_func_start GetAdjustedInitialDirection
-GetAdjustedInitialDirection: @ 8055B74
- push {r4-r7,lr}
- adds r6, r0, 0
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 16
- lsrs r4, r2, 16
- lsls r3, 24
- lsrs r5, r3, 24
- ldr r0, _08055BD4 @ =0x00000802
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _08055B94
- cmp r5, 0x6
- beq _08055C3E
-_08055B94:
- lsls r4, 24
- lsrs r5, r4, 24
- adds r0, r5, 0
- bl MetatileBehavior_ReturnFalse_2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055BD0
- adds r0, r5, 0
- bl MetatileBehavior_IsNonAnimDoor
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C68
- adds r0, r5, 0
- bl MetatileBehavior_IsWarpDoor_2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C68
- adds r0, r5, 0
- bl MetatileBehavior_IsSouthArrowWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08055BD8
-_08055BD0:
- movs r0, 0x2
- b _08055C6E
- .align 2, 0
-_08055BD4: .4byte 0x00000802
-_08055BD8:
- adds r0, r5, 0
- bl MetatileBehavior_IsNorthArrowWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C68
- adds r0, r5, 0
- bl MetatileBehavior_IsWestArrowWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C3E
- adds r0, r5, 0
- bl MetatileBehavior_IsEastArrowWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C1E
- adds r0, r5, 0
- bl MetatileBehavior_IsUnknownWarp6C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C1E
- adds r0, r5, 0
- bl MetatileBehavior_IsUnknownWarp6E
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08055C22
-_08055C1E:
- movs r0, 0x3
- b _08055C6E
-_08055C22:
- adds r0, r5, 0
- bl MetatileBehavior_IsUnknownWarp6D
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C3E
- adds r0, r5, 0
- bl MetatileBehavior_IsUnknownWarp6F
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08055C42
-_08055C3E:
- movs r0, 0x4
- b _08055C6E
-_08055C42:
- ldrb r0, [r6]
- cmp r0, 0x10
- bne _08055C4C
- cmp r7, 0x8
- beq _08055C6C
-_08055C4C:
- cmp r0, 0x8
- bne _08055C54
- cmp r7, 0x10
- beq _08055C6C
-_08055C54:
- lsrs r0, r4, 24
- bl MetatileBehavior_IsLadder
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055C6C
- ldrb r0, [r6, 0x2]
- cmp r0, 0
- bne _08055C6C
-_08055C68:
- movs r0, 0x1
- b _08055C6E
-_08055C6C:
- ldrb r0, [r6, 0x1]
-_08055C6E:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetAdjustedInitialDirection
-
- thumb_func_start GetCenterScreenMetatileBehavior
-GetCenterScreenMetatileBehavior: @ 8055C74
- push {lr}
- ldr r0, _08055C98 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- ldrh r0, [r1]
- adds r0, 0x7
- lsls r0, 16
- asrs r0, 16
- ldrh r1, [r1, 0x2]
- adds r1, 0x7
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_08055C98: .4byte gSaveBlock1Ptr
- thumb_func_end GetCenterScreenMetatileBehavior
-
- thumb_func_start Overworld_IsBikingAllowed
-Overworld_IsBikingAllowed: @ 8055C9C
- push {lr}
- ldr r0, _08055CAC @ =gMapHeader
- ldrb r0, [r0, 0x18]
- cmp r0, 0
- beq _08055CB0
- movs r0, 0x1
- b _08055CB2
- .align 2, 0
-_08055CAC: .4byte gMapHeader
-_08055CB0:
- movs r0, 0
-_08055CB2:
- pop {r1}
- bx r1
- thumb_func_end Overworld_IsBikingAllowed
-
- thumb_func_start SetDefaultFlashLevel
-SetDefaultFlashLevel: @ 8055CB8
- push {lr}
- ldr r0, _08055CC8 @ =gMapHeader
- ldrb r1, [r0, 0x15]
- cmp r1, 0
- bne _08055CD0
- ldr r0, _08055CCC @ =gSaveBlock1Ptr
- ldr r0, [r0]
- b _08055CF8
- .align 2, 0
-_08055CC8: .4byte gMapHeader
-_08055CCC: .4byte gSaveBlock1Ptr
-_08055CD0:
- ldr r0, _08055CE8 @ =0x00000806
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _08055CF0
- ldr r0, _08055CEC @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x30
- movs r1, 0
- b _08055CFA
- .align 2, 0
-_08055CE8: .4byte 0x00000806
-_08055CEC: .4byte gSaveBlock1Ptr
-_08055CF0:
- ldr r0, _08055D00 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _08055D04 @ =gMaxFlashLevel
- ldr r1, [r1]
-_08055CF8:
- adds r0, 0x30
-_08055CFA:
- strb r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_08055D00: .4byte gSaveBlock1Ptr
-_08055D04: .4byte gMaxFlashLevel
- thumb_func_end SetDefaultFlashLevel
-
- thumb_func_start Overworld_SetFlashLevel
-Overworld_SetFlashLevel: @ 8055D08
- push {lr}
- adds r1, r0, 0
- cmp r1, 0
- blt _08055D18
- ldr r0, _08055D28 @ =gMaxFlashLevel
- ldr r0, [r0]
- cmp r1, r0
- ble _08055D1A
-_08055D18:
- movs r1, 0
-_08055D1A:
- ldr r0, _08055D2C @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x30
- strb r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_08055D28: .4byte gMaxFlashLevel
-_08055D2C: .4byte gSaveBlock1Ptr
- thumb_func_end Overworld_SetFlashLevel
-
- thumb_func_start Overworld_GetFlashLevel
-Overworld_GetFlashLevel: @ 8055D30
- ldr r0, _08055D3C @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x30
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_08055D3C: .4byte gSaveBlock1Ptr
- thumb_func_end Overworld_GetFlashLevel
-
- thumb_func_start SetCurrentMapLayout
-SetCurrentMapLayout: @ 8055D40
- push {lr}
- ldr r1, _08055D54 @ =gSaveBlock1Ptr
- ldr r1, [r1]
- strh r0, [r1, 0x32]
- bl GetMapLayout
- ldr r1, _08055D58 @ =gMapHeader
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08055D54: .4byte gSaveBlock1Ptr
-_08055D58: .4byte gMapHeader
- thumb_func_end SetCurrentMapLayout
-
- thumb_func_start sub_8055D5C
-sub_8055D5C: @ 8055D5C
- ldr r2, _08055D68 @ =sWarpDestination
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .align 2, 0
-_08055D68: .4byte sWarpDestination
- thumb_func_end sub_8055D5C
-
- thumb_func_start sub_8055D6C
-sub_8055D6C: @ 8055D6C
- push {lr}
- adds r1, r0, 0
- movs r0, 0
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x1]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl Overworld_GetMapHeaderByGroupAndId
- ldrh r0, [r0, 0x10]
- pop {r1}
- bx r1
- thumb_func_end sub_8055D6C
-
- thumb_func_start sub_8055D8C
-sub_8055D8C: @ 8055D8C
- push {lr}
- ldr r0, _08055DA0 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x4
- bl sub_8055D6C
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_08055DA0: .4byte gSaveBlock1Ptr
- thumb_func_end sub_8055D8C
-
- thumb_func_start sub_8055DA4
-sub_8055DA4: @ 8055DA4
- push {lr}
- ldr r0, _08055DB4 @ =sWarpDestination
- bl sub_8055D6C
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_08055DB4: .4byte sWarpDestination
- thumb_func_end sub_8055DA4
-
- thumb_func_start sub_8055DB8
-sub_8055DB8: @ 8055DB8
- push {lr}
- bl ResetMapMusic
- pop {r0}
- bx r0
- thumb_func_end sub_8055DB8
-
- thumb_func_start Overworld_PlaySpecialMapMusic
-Overworld_PlaySpecialMapMusic: @ 8055DC4
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r0, _08055DD8 @ =gDisableMapMusicChangeOnMapLoad
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08055DDC
- bl StopMapMusic
- b _08055E6C
- .align 2, 0
-_08055DD8: .4byte gDisableMapMusicChangeOnMapLoad
-_08055DDC:
- cmp r0, 0x2
- beq _08055E6C
- ldr r0, _08055E14 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- ldr r0, _08055E18 @ =0x00004f01
- cmp r1, r0
- bne _08055E24
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- movs r1, 0
- ldrsh r0, [r4, r1]
- subs r0, 0x7
- cmp r0, 0xA
- bgt _08055E24
- ldr r0, _08055E1C @ =gMPlayInfo_BGM
- ldr r1, [r0]
- ldr r0, _08055E20 @ =mus_win_gym
- cmp r1, r0
- bne _08055E24
- movs r0, 0x4
- bl FadeInBGM
- b _08055E6C
- .align 2, 0
-_08055E14: .4byte gSaveBlock1Ptr
-_08055E18: .4byte 0x00004f01
-_08055E1C: .4byte gMPlayInfo_BGM
-_08055E20: .4byte mus_win_gym
-_08055E24:
- bl sub_8055D8C
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, _08055E3C @ =gSaveBlock1Ptr
- ldr r1, [r0]
- ldrh r0, [r1, 0x2C]
- cmp r0, 0
- beq _08055E40
- adds r4, r0, 0
- b _08055E5A
- .align 2, 0
-_08055E3C: .4byte gSaveBlock1Ptr
-_08055E40:
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08055E5A
- ldr r5, _08055E74 @ =0x00000131 @ MUS_NAMINORI
- adds r0, r5, 0
- bl sub_8056124
- cmp r0, 0
- beq _08055E5A
- adds r4, r5, 0
-_08055E5A:
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r0, 16
- cmp r4, r0
- beq _08055E6C
- adds r0, r4, 0
- bl PlayNewMapMusic
-_08055E6C:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08055E74: .4byte 0x00000131
- thumb_func_end Overworld_PlaySpecialMapMusic
-
- thumb_func_start Overworld_SetSavedMusic
-Overworld_SetSavedMusic: @ 8055E78
- ldr r1, _08055E80 @ =gSaveBlock1Ptr
- ldr r1, [r1]
- strh r0, [r1, 0x2C]
- bx lr
- .align 2, 0
-_08055E80: .4byte gSaveBlock1Ptr
- thumb_func_end Overworld_SetSavedMusic
-
- thumb_func_start Overworld_ClearSavedMusic
-Overworld_ClearSavedMusic: @ 8055E84
- ldr r0, _08055E90 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0
- strh r0, [r1, 0x2C]
- bx lr
- .align 2, 0
-_08055E90: .4byte gSaveBlock1Ptr
- thumb_func_end Overworld_ClearSavedMusic
-
- thumb_func_start sub_8055E94
-sub_8055E94: @ 8055E94
- push {r4-r6,lr}
- ldr r0, _08055EA4 @ =gDisableMapMusicChangeOnMapLoad
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08055EA8
- bl StopMapMusic
- b _08055F14
- .align 2, 0
-_08055EA4: .4byte gDisableMapMusicChangeOnMapLoad
-_08055EA8:
- cmp r0, 0x2
- beq _08055F14
- ldr r0, _08055F04 @ =0x00004001
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055F14
- bl sub_8055DA4
- lsls r0, 16
- lsrs r4, r0, 16
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r5, _08055F08 @ =0x00000131 @ MUS_NAMINORI
- cmp r6, r5
- beq _08055F14
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08055EE8
- adds r0, r5, 0
- bl sub_8056124
- cmp r0, 0
- beq _08055EE8
- adds r4, r5, 0
-_08055EE8:
- cmp r4, r6
- beq _08055F14
- movs r0, 0x6
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08055F0C
- adds r0, r4, 0
- movs r1, 0x4
- movs r2, 0x4
- bl FadeOutAndFadeInNewMapMusic
- b _08055F14
- .align 2, 0
-_08055F04: .4byte 0x00004001
-_08055F08: .4byte 0x00000131
-_08055F0C:
- adds r0, r4, 0
- movs r1, 0x8
- bl FadeOutAndPlayNewMapMusic
-_08055F14:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8055E94
-
- thumb_func_start Overworld_ChangeMusicToDefault
-Overworld_ChangeMusicToDefault: @ 8055F1C
- push {r4,lr}
- bl GetCurrentMapMusic
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl sub_8055D8C
- lsls r0, 16
- lsrs r0, 16
- cmp r4, r0
- beq _08055F42
- bl sub_8055D8C
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x8
- bl FadeOutAndPlayNewMapMusic
-_08055F42:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end Overworld_ChangeMusicToDefault
-
- thumb_func_start Overworld_ChangeMusicTo
-Overworld_ChangeMusicTo: @ 8055F48
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r4
- beq _08055F62
- adds r0, r4, 0
- movs r1, 0x8
- bl FadeOutAndPlayNewMapMusic
-_08055F62:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end Overworld_ChangeMusicTo
-
- thumb_func_start GetMapMusicFadeoutSpeed
-GetMapMusicFadeoutSpeed: @ 8055F68
- push {lr}
- bl GetDestinationWarpMapHeader
- ldrb r0, [r0, 0x17]
- bl IsMapTypeIndoors
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055F80
- movs r0, 0x4
- b _08055F82
-_08055F80:
- movs r0, 0x2
-_08055F82:
- pop {r1}
- bx r1
- thumb_func_end GetMapMusicFadeoutSpeed
-
- thumb_func_start TryFadeOutOldMapMusic
-TryFadeOutOldMapMusic: @ 8055F88
- push {r4,lr}
- bl sub_8055DA4
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, _08055FC0 @ =0x00004001
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08055FB8
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r0, 16
- cmp r4, r0
- beq _08055FB8
- bl GetMapMusicFadeoutSpeed
- lsls r0, 24
- lsrs r0, 24
- bl FadeOutMapMusic
-_08055FB8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08055FC0: .4byte 0x00004001
- thumb_func_end TryFadeOutOldMapMusic
-
- thumb_func_start BGMusicStopped
-BGMusicStopped: @ 8055FC4
- push {lr}
- bl IsNotWaitingForBGMStop
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end BGMusicStopped
-
- thumb_func_start Overworld_FadeOutMapMusic
-Overworld_FadeOutMapMusic: @ 8055FD4
- push {lr}
- movs r0, 0x4
- bl FadeOutMapMusic
- pop {r0}
- bx r0
- thumb_func_end Overworld_FadeOutMapMusic
-
- thumb_func_start sub_8055FE0
-sub_8055FE0: @ 8055FE0
- push {r4,lr}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- ldr r0, _0805604C @ =gUnknown_2031DDC
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08056014
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsSurfable
- lsls r0, 24
- cmp r0, 0
- beq _0805606A
-_08056014:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x58
- bl __umodsi3
- adds r0, 0xD4
- lsls r0, 24
- lsrs r4, r0, 24
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1E
- bl __umodsi3
- adds r0, 0x32
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08056050 @ =gDisableMapMusicChangeOnMapLoad
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08056054
- bl StopMapMusic
- b _0805606A
- .align 2, 0
-_0805604C: .4byte gUnknown_2031DDC
-_08056050: .4byte gDisableMapMusicChangeOnMapLoad
-_08056054:
- cmp r0, 0x2
- beq _0805606A
- ldr r0, _08056074 @ =gUnknown_2031DDA
- ldrh r0, [r0]
- lsls r1, r4, 24
- asrs r1, 24
- lsls r2, 24
- asrs r2, 24
- movs r3, 0x1
- bl PlayCry2
-_0805606A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08056074: .4byte gUnknown_2031DDA
- thumb_func_end sub_8055FE0
-
- thumb_func_start sub_8056078
-sub_8056078: @ 8056078
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r5, r1, 0
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0x4
- bhi _08056106
- lsls r0, 2
- ldr r1, _08056090 @ =_08056094
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08056090: .4byte _08056094
- .align 2, 0
-_08056094:
- .4byte _080560A8
- .4byte _080560BC
- .4byte _080560D8
- .4byte _080560F2
- .4byte _08056106
-_080560A8:
- ldr r0, _080560B4 @ =gUnknown_2031DDA
- ldrh r0, [r0]
- cmp r0, 0
- bne _080560B8
- movs r0, 0x4
- b _08056104
- .align 2, 0
-_080560B4: .4byte gUnknown_2031DDA
-_080560B8:
- movs r0, 0x1
- b _08056104
-_080560BC:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x96
- lsls r1, 4
- bl __umodsi3
- movs r1, 0x96
- lsls r1, 3
- adds r0, r1
- strh r0, [r5]
- movs r0, 0x3
- b _08056104
-_080560D8:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r4, 0x96
- lsls r4, 3
- adds r1, r4, 0
- bl __umodsi3
- adds r0, r4
- strh r0, [r5]
- movs r0, 0x3
- b _08056104
-_080560F2:
- ldrh r0, [r5]
- subs r0, 0x1
- strh r0, [r5]
- lsls r0, 16
- cmp r0, 0
- bne _08056106
- bl sub_8055FE0
- movs r0, 0x2
-_08056104:
- strh r0, [r6]
-_08056106:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8056078
-
- thumb_func_start ChooseAmbientCrySpecies
-ChooseAmbientCrySpecies: @ 805610C
- push {lr}
- ldr r0, _0805611C @ =gUnknown_2031DDC
- bl GetLocalWildMon
- ldr r1, _08056120 @ =gUnknown_2031DDA
- strh r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0805611C: .4byte gUnknown_2031DDC
-_08056120: .4byte gUnknown_2031DDA
- thumb_func_end ChooseAmbientCrySpecies
-
thumb_func_start sub_8056124
sub_8056124: @ 8056124
push {lr}
diff --git a/data/maps/CinnabarIsland/scripts.inc b/data/maps/CinnabarIsland/scripts.inc
index e0260dac5..40e8288cd 100644
--- a/data/maps/CinnabarIsland/scripts.inc
+++ b/data/maps/CinnabarIsland/scripts.inc
@@ -60,7 +60,7 @@ CinnabarIsland_OnFrame:: @ 8166F6E
CinnabarIsland_EventScript_ExitPokeCenterForOneIsland:: @ 8166F88
lockall
- clearflag FLAG_SPECIAL_FLAG_0x4001
+ clearflag FLAG_DONT_TRANSITION_MUSIC
savebgm MUS_DUMMY
textcolor 0
setvar VAR_MAP_SCENE_CINNABAR_ISLAND_2, 2
diff --git a/data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc b/data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc
index c96169d1d..844c38997 100644
--- a/data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc
+++ b/data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc
@@ -36,7 +36,7 @@ CinnabarIsland_PokemonCenter_1F_EventScript_Bill:: @ 816E90A
closemessage
playbgm MUS_ANNAI, 1
savebgm MUS_ANNAI
- setflag FLAG_SPECIAL_FLAG_0x4001
+ setflag FLAG_DONT_TRANSITION_MUSIC
setflag FLAG_HIDE_CINNABAR_POKECENTER_BILL
delay 20
compare VAR_FACING, DIR_SOUTH
diff --git a/data/maps/PalletTown/scripts.inc b/data/maps/PalletTown/scripts.inc
index b165ae6b9..1b98d4cb4 100644
--- a/data/maps/PalletTown/scripts.inc
+++ b/data/maps/PalletTown/scripts.inc
@@ -224,7 +224,7 @@ PalletTown_EventScript_OakTrigger:: @ 8165605
clearflag FLAG_HIDE_OAK_IN_HIS_LAB
setvar VAR_MAP_SCENE_PALLET_TOWN_OAK, 1
setflag FLAG_HIDE_OAK_IN_PALLET_TOWN
- setflag FLAG_SPECIAL_FLAG_0x4001
+ setflag FLAG_DONT_TRANSITION_MUSIC
warp MAP_PALLET_TOWN_PROFESSOR_OAKS_LAB, 255, 6, 12
waitstate
releaseall
diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
index 461318e35..facebea6b 100644
--- a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
+++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
@@ -238,7 +238,7 @@ PalletTown_ProfessorOaksLab_ChooseStarterScene:: @ 816923E
waitmovement 0
applymovement LOCALID_RIVAL, Movement_WalkInPlaceFastestUp
waitmovement 0
- clearflag FLAG_SPECIAL_FLAG_0x4001
+ clearflag FLAG_DONT_TRANSITION_MUSIC
savebgm SE_STOP
fadedefaultbgm
msgbox PalletTown_ProfessorOaksLab_Text_RivalFedUpWithWaiting
diff --git a/include/constants/flags.h b/include/constants/flags.h
index c259c2e12..212718bc9 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -1438,7 +1438,7 @@
#define SPECIAL_FLAGS_START 0x4000
#define SPECIAL_FLAGS_COUNT 16
#define FLAG_SPECIAL_FLAG_0x4000 0x4000
-#define FLAG_SPECIAL_FLAG_0x4001 0x4001
+#define FLAG_DONT_TRANSITION_MUSIC 0x4001
#define FLAG_SPECIAL_FLAG_0x4002 0x4002
#define FLAG_SPECIAL_FLAG_0x4003 0x4003
#define FLAG_SPECIAL_FLAG_0x4004 0x4004
diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h
index aee7dc5a7..a15d99120 100644
--- a/include/field_screen_effect.h
+++ b/include/field_screen_effect.h
@@ -11,4 +11,6 @@ void DoOutwardBarnDoorWipe(void);
void Task_BarnDoorWipe(u8 taskId);
void sub_807F5F0(void);
+extern const s32 gMaxFlashLevel;
+
#endif // GUARD_FIELD_SCREEN_EFFECT_H
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 9c9daa4cb..0d45a6d68 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -195,12 +195,21 @@ struct MapHeader
/* 0x15 */ u8 cave;
/* 0x16 */ u8 weather;
/* 0x17 */ u8 mapType;
- /* 0x18 */ u8 filler_18;
+ /* 0x18 */ u8 bikingAllowed;
/* 0x19 */ u8 escapeRope;
/* 0x1A */ s8 flags;
/* 0x1B */ u8 battleType;
};
+// Flags for gMapHeader.flags, as defined in the map_header_flags macro
+#define MAP_ALLOW_BIKE (1 << 0)
+#define MAP_ALLOW_ESCAPE_ROPE (1 << 1)
+#define MAP_ALLOW_RUN (1 << 2)
+#define MAP_SHOW_MAP_NAME (1 << 3)
+#define UNUSED_MAP_FLAGS (1 << 4 | 1 << 5 | 1 << 6 | 1 << 7)
+
+#define SHOW_MAP_NAME_ENABLED ((gMapHeader.flags & (MAP_SHOW_MAP_NAME | UNUSED_MAP_FLAGS)) == MAP_SHOW_MAP_NAME)
+
struct ObjectEvent
{
/*0x00*/ /* 0*/ u32 active:1;
diff --git a/include/m4a.h b/include/m4a.h
index ee23d917a..b67dd0492 100644
--- a/include/m4a.h
+++ b/include/m4a.h
@@ -25,4 +25,6 @@ void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed);
void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed);
void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo);
+extern const struct SongHeader mus_win_gym;
+
#endif //GUARD_M4A_H
diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h
index a5f5a81b7..899586e0f 100644
--- a/include/metatile_behavior.h
+++ b/include/metatile_behavior.h
@@ -24,7 +24,7 @@ bool8 MetatileBehavior_IsUnknownWarp6F(u8 metatileBehavior);
bool8 MetatileBehavior_IsUnknownWarp6C_to_6F(u8 metatileBehavior);
bool8 MetatileBehavior_IsLadder(u8 metatileBehavior);
bool8 MetatileBehavior_IsNonAnimDoor(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_2(u8 metatileBehavior);
+bool8 MetatileBehavior_IsDeepSouthWarp(u8 metatileBehavior);
bool8 MetatileBehavior_IsSurfable(u8 metatileBehavior);
bool8 MetatileBehavior_IsSemiDeepWater(u8 metatileBehavior);
bool8 MetatileBehavior_IsEastArrowWarp(u8 metatileBehavior);
diff --git a/include/overworld.h b/include/overworld.h
index db214f237..3da3667b1 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -177,14 +177,14 @@ void SetContinueGameWarpToDynamicWarp(int);
void SetContinueGameWarpToHealLocation(u8 loc);
-void sub_8056078(void *, void *);
+void UpdateAmbientCry(s16 *state, u16 *delayCounter);
void SetWarpDestinationToHealLocation(u8 a0);
bool32 sub_80582E0(void);
bool32 sub_8058274(void);
u8 GetCurrentMapBattleScene(void);
void Overworld_ResetStateAfterFly(void);
bool8 sub_8055B38(u16 metatileBehavior);
-void sub_8055DB8(void);
+void Overworld_ResetMapMusic(void);
void sub_8057F5C(void);
void sub_8057F34(void);
u32 sub_8057EC0(void);
diff --git a/src/cable_club.c b/src/cable_club.c
index bc41ca4f6..93e333bef 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -724,7 +724,7 @@ static void sub_8081624(void)
void CB2_ReturnFromCableClubBattle(void)
{
gBattleTypeFlags &= (u16)~BATTLE_TYPE_20;
- sub_8055DB8();
+ Overworld_ResetMapMusic();
LoadPlayerParty();
SavePlayerBag();
Special_UpdateTrainerFansAfterLinkBattle();
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 6bd4b6f46..4c7b93f20 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -63,7 +63,7 @@ static void Task_RunTimeBasedEvents(u8 taskId)
{
if (gQuestLogState != 2 && gQuestLogState != 3)
{
- sub_8056078(&data[1], &data[2]);
+ UpdateAmbientCry(&data[1], &data[2]);
}
}
}
diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c
index c937a3b48..cbbc37ba1 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -199,7 +199,7 @@ bool8 MetatileBehavior_IsNonAnimDoor(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_ReturnFalse_2(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsDeepSouthWarp(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_IsSurfable(u8 metatileBehavior)
{
diff --git a/src/overworld.c b/src/overworld.c
index ff16ac47e..0fa93414a 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -5,16 +5,19 @@
#include "field_camera.h"
#include "field_control_avatar.h"
#include "field_player_avatar.h"
+#include "field_screen_effect.h"
#include "field_specials.h"
#include "field_weather.h"
#include "fieldmap.h"
#include "heal_location.h"
#include "load_save.h"
+#include "m4a.h"
#include "map_name_popup.h"
#include "metatile_behavior.h"
#include "money.h"
#include "overworld.h"
#include "quest_log.h"
+#include "random.h"
#include "renewable_hidden_items.h"
#include "roamer.h"
#include "save_location.h"
@@ -22,9 +25,11 @@
#include "script_pokemon_util.h"
#include "tileset_anims.h"
#include "vs_seeker.h"
+#include "wild_encounter.h"
#include "constants/maps.h"
#include "constants/flags.h"
#include "constants/species.h"
+#include "constants/songs.h"
struct InitialPlayerAvatarState
{
@@ -39,8 +44,8 @@ EWRAM_DATA struct WarpData gFixedDiveWarp = {};
EWRAM_DATA struct WarpData gFixedHoleWarp = {};
EWRAM_DATA struct InitialPlayerAvatarState gInitialPlayerAvatarState = {};
EWRAM_DATA bool8 gDisableMapMusicChangeOnMapLoad = FALSE;
-EWRAM_DATA u16 gUnknown_2031DDA = SPECIES_NONE;
-EWRAM_DATA bool8 gUnknown_2031DDC = FALSE;
+EWRAM_DATA u16 sAmbientCrySpecies = SPECIES_NONE;
+EWRAM_DATA bool8 sIsAmbientCryWaterMon = FALSE;
// File boundary perhaps?
ALIGNED(4) EWRAM_DATA bool8 gUnknown_2031DE0 = FALSE;
@@ -57,8 +62,9 @@ void Overworld_SetWhiteoutRespawnPoint(void);
u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 metatileBehavior, u8 mapType);
u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStruct, u8 transitionFlags, u16 metatileBehavior, u8 mapType);
u16 GetCenterScreenMetatileBehavior(void);
-void sub_8055E94(void);
+bool8 sub_8055B38(u16 metatileBehavior);
void SetDefaultFlashLevel(void);
+void Overworld_TryMapConnectionMusicTransition(void);
void ChooseAmbientCrySpecies(void);
extern const struct MapLayout * gMapLayouts[];
@@ -587,7 +593,7 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
int paletteIndex;
SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
- sub_8055E94();
+ Overworld_TryMapConnectionMusicTransition();
ApplyCurrentWarp();
LoadCurrentMapData();
sub_8054F68();
@@ -706,8 +712,6 @@ struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void)
return &gInitialPlayerAvatarState;
}
-bool8 sub_8055B38(u16 metatileBehavior);
-
u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 metatileBehavior, u8 mapType)
{
if (mapType != MAP_TYPE_INDOOR && FlagGet(FLAG_SYS_CRUISE_MODE))
@@ -736,3 +740,287 @@ bool8 sub_8055B38(u16 metatileBehavior)
return TRUE;
return FALSE;
}
+
+u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStruct, u8 transitionFlags, u16 metatileBehavior, u8 mapType)
+{
+ if (FlagGet(FLAG_SYS_CRUISE_MODE) && mapType == MAP_TYPE_OCEAN_ROUTE)
+ return DIR_EAST;
+ else if (MetatileBehavior_IsDeepSouthWarp(metatileBehavior) == TRUE)
+ return DIR_NORTH;
+ else if (MetatileBehavior_IsNonAnimDoor(metatileBehavior) == TRUE || MetatileBehavior_IsWarpDoor_2(metatileBehavior) == TRUE)
+ return DIR_SOUTH;
+ else if (MetatileBehavior_IsSouthArrowWarp(metatileBehavior) == TRUE)
+ return DIR_NORTH;
+ else if (MetatileBehavior_IsNorthArrowWarp(metatileBehavior) == TRUE)
+ return DIR_SOUTH;
+ else if (MetatileBehavior_IsWestArrowWarp(metatileBehavior) == TRUE)
+ return DIR_EAST;
+ else if (MetatileBehavior_IsEastArrowWarp(metatileBehavior) == TRUE)
+ return DIR_WEST;
+ else if (MetatileBehavior_IsUnknownWarp6C(metatileBehavior) == TRUE || MetatileBehavior_IsUnknownWarp6E(metatileBehavior) == TRUE)
+ return DIR_WEST;
+ else if (MetatileBehavior_IsUnknownWarp6D(metatileBehavior) == TRUE || MetatileBehavior_IsUnknownWarp6F(metatileBehavior) == TRUE)
+ return DIR_EAST;
+ else if ((playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER && transitionFlags == PLAYER_AVATAR_FLAG_SURFING)
+ || (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER ))
+ return playerStruct->direction;
+ else if (MetatileBehavior_IsLadder(metatileBehavior) == TRUE)
+ return playerStruct->direction;
+ else if (playerStruct->unk2)
+ return playerStruct->direction;
+ else
+ return DIR_SOUTH;
+}
+
+u16 GetCenterScreenMetatileBehavior(void)
+{
+ return MapGridGetMetatileBehaviorAt(gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7);
+}
+
+bool32 Overworld_IsBikingAllowed(void)
+{
+ if (!gMapHeader.bikingAllowed)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void SetDefaultFlashLevel(void)
+{
+ if (!gMapHeader.cave)
+ gSaveBlock1Ptr->flashLevel = 0;
+ else if (FlagGet(FLAG_SYS_FLASH_ACTIVE))
+ gSaveBlock1Ptr->flashLevel = 0;
+ else
+ gSaveBlock1Ptr->flashLevel = gMaxFlashLevel;
+}
+
+void Overworld_SetFlashLevel(s32 flashLevel)
+{
+ if (flashLevel < 0 || flashLevel > gMaxFlashLevel)
+ flashLevel = 0;
+ gSaveBlock1Ptr->flashLevel = flashLevel;
+}
+
+u8 Overworld_GetFlashLevel(void)
+{
+ return gSaveBlock1Ptr->flashLevel;
+}
+
+void SetCurrentMapLayout(u16 mapLayoutId)
+{
+ gSaveBlock1Ptr->mapLayoutId = mapLayoutId;
+ gMapHeader.mapLayout = GetMapLayout();
+}
+
+void sub_8055D5C(struct WarpData * warp)
+{
+ sWarpDestination = *warp;
+}
+
+u16 GetLocationMusic(struct WarpData * warp)
+{
+ return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music;
+}
+
+u16 GetCurrLocationDefaultMusic(void)
+{
+ u16 music;
+ music = GetLocationMusic(&gSaveBlock1Ptr->location);
+ return music;
+}
+
+u16 GetWarpDestinationMusic(void)
+{
+ u16 music = GetLocationMusic(&sWarpDestination);
+ return music;
+}
+
+void Overworld_ResetMapMusic(void)
+{
+ ResetMapMusic();
+}
+
+void Overworld_PlaySpecialMapMusic(void)
+{
+ u16 music;
+ s16 x, y;
+
+ if (gDisableMapMusicChangeOnMapLoad == 1)
+ {
+ StopMapMusic();
+ return;
+ }
+ if (gDisableMapMusicChangeOnMapLoad == 2)
+ {
+ return;
+ }
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(POKEMON_LEAGUE_CHAMPIONS_ROOM) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(POKEMON_LEAGUE_CHAMPIONS_ROOM))
+ {
+ PlayerGetDestCoords(&x, &y);
+ if (y - 7 < 11 && gMPlayInfo_BGM.songHeader == &mus_win_gym)
+ {
+ FadeInBGM(4);
+ return;
+ }
+ }
+
+ music = GetCurrLocationDefaultMusic();
+
+ if (gSaveBlock1Ptr->savedMusic)
+ music = gSaveBlock1Ptr->savedMusic;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) &&sub_8056124(MUS_NAMINORI))
+ music = MUS_NAMINORI;
+
+ if (music != GetCurrentMapMusic())
+ PlayNewMapMusic(music);
+}
+
+void Overworld_SetSavedMusic(u16 songNum)
+{
+ gSaveBlock1Ptr->savedMusic = songNum;
+}
+
+void Overworld_ClearSavedMusic(void)
+{
+ gSaveBlock1Ptr->savedMusic = 0;
+}
+
+void Overworld_TryMapConnectionMusicTransition(void)
+{
+ u16 newMusic;
+ u16 currentMusic;
+
+ if (gDisableMapMusicChangeOnMapLoad == 1)
+ {
+ StopMapMusic();
+ return;
+ }
+ if (gDisableMapMusicChangeOnMapLoad == 2)
+ {
+ return;
+ }
+
+ if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE)
+ {
+ newMusic = GetWarpDestinationMusic();
+ currentMusic = GetCurrentMapMusic();
+ if (currentMusic == MUS_NAMINORI)
+ return;
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && sub_8056124(MUS_NAMINORI))
+ newMusic = MUS_NAMINORI;
+ if (newMusic != currentMusic)
+ {
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ FadeOutAndFadeInNewMapMusic(newMusic, 4, 4);
+ else
+ FadeOutAndPlayNewMapMusic(newMusic, 8);
+ }
+ }
+}
+
+void Overworld_ChangeMusicToDefault(void)
+{
+ u16 currentMusic = GetCurrentMapMusic();
+ if (currentMusic != GetCurrLocationDefaultMusic())
+ FadeOutAndPlayNewMapMusic(GetCurrLocationDefaultMusic(), 8);
+}
+
+void Overworld_ChangeMusicTo(u16 newMusic)
+{
+ u16 currentMusic = GetCurrentMapMusic();
+ if (currentMusic != newMusic)
+ FadeOutAndPlayNewMapMusic(newMusic, 8);
+}
+
+u8 GetMapMusicFadeoutSpeed(void)
+{
+ const struct MapHeader *mapHeader = GetDestinationWarpMapHeader();
+ if (IsMapTypeIndoors(mapHeader->mapType) == TRUE)
+ return 2;
+ else
+ return 4;
+}
+
+void TryFadeOutOldMapMusic(void)
+{
+ u16 warpMusic = GetWarpDestinationMusic();
+ if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE && warpMusic != GetCurrentMapMusic())
+ {
+ FadeOutMapMusic(GetMapMusicFadeoutSpeed());
+ }
+}
+
+bool8 BGMusicStopped(void)
+{
+ return IsNotWaitingForBGMStop();
+}
+
+void Overworld_FadeOutMapMusic(void)
+{
+ FadeOutMapMusic(4);
+}
+
+void PlayAmbientCry(void)
+{
+ s16 x, y;
+ s8 pan;
+ s8 volume;
+
+ PlayerGetDestCoords(&x, &y);
+ if (sIsAmbientCryWaterMon == TRUE
+ && !MetatileBehavior_IsSurfable(MapGridGetMetatileBehaviorAt(x, y)))
+ return;
+ pan = (Random() % 88) + 212;
+ volume = (Random() % 30) + 50;
+
+ if (gDisableMapMusicChangeOnMapLoad == 1)
+ {
+ StopMapMusic();
+ return;
+ }
+ if (gDisableMapMusicChangeOnMapLoad == 2)
+ {
+ return;
+ }
+
+ PlayCry2(sAmbientCrySpecies, pan, volume, 1);
+}
+
+void UpdateAmbientCry(s16 *state, u16 *delayCounter)
+{
+ u8 i, monsCount, divBy;
+
+ switch (*state)
+ {
+ case 0:
+ if (sAmbientCrySpecies == SPECIES_NONE)
+ *state = 4;
+ else
+ *state = 1;
+ break;
+ case 1:
+ *delayCounter = (Random() % 2400) + 1200;
+ *state = 3;
+ break;
+ case 2:
+ *delayCounter = (Random() % 1200) + 1200;
+ *state = 3;
+ break;
+ case 3:
+ (*delayCounter)--;
+ if (*delayCounter == 0)
+ {
+ PlayAmbientCry();
+ *state = 2;
+ }
+ break;
+ case 4:
+ break;
+ }
+}
+
+void ChooseAmbientCrySpecies(void)
+{
+ sAmbientCrySpecies = GetLocalWildMon(&sIsAmbientCryWaterMon);
+}