through ChooseAmbientCrySpecies

This commit is contained in:
PikalaxALT
2020-03-28 10:42:23 -04:00
parent fe9c3d3b58
commit 816e7ad1f8
15 changed files with 319 additions and 793 deletions
+294 -6
View File
@@ -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);
}