diff options
-rw-r--r-- | asm/overworld.s | 775 | ||||
-rw-r--r-- | data/maps/CinnabarIsland/scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/PalletTown/scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/PalletTown_ProfessorOaksLab/scripts.inc | 2 | ||||
-rw-r--r-- | include/constants/flags.h | 2 | ||||
-rw-r--r-- | include/field_screen_effect.h | 2 | ||||
-rw-r--r-- | include/global.fieldmap.h | 11 | ||||
-rw-r--r-- | include/m4a.h | 2 | ||||
-rw-r--r-- | include/metatile_behavior.h | 2 | ||||
-rw-r--r-- | include/overworld.h | 4 | ||||
-rw-r--r-- | src/cable_club.c | 2 | ||||
-rw-r--r-- | src/field_tasks.c | 2 | ||||
-rw-r--r-- | src/metatile_behavior.c | 2 | ||||
-rw-r--r-- | src/overworld.c | 300 |
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); +} |