Compare commits

..

3 commits

Author SHA1 Message Date
Strelkasaurus 96de8284ac Release 1.0.1 2022-07-27 03:31:14 +02:00
Strelkasaurus e7075c1c7d Reset the secret woods music whenever it is entered
The game only does this before 1800, afterwards it is expected that no sound will play.
However, with this mod installed having silence 1800-2000 is a bit jarring, so we keep
the woods theme playing until 2000. We need to handle playing this in the time range
1800-2000.
2022-07-27 03:29:49 +02:00
Strelkasaurus d7e8314eb9 Handle looping correctly for the woods and the bus 2022-07-26 22:26:26 +02:00
3 changed files with 44 additions and 3 deletions

View file

@ -1,5 +1,10 @@
# Changelog # Changelog
## [1.0.1] - 2022-07-27
### Fixed
- Don't try to restart the music while on the bus.
- Handle the specific secret woods case; play it's specific song instead of the generic seasonal.
## [1.0.0] - 2022-07-26 ## [1.0.0] - 2022-07-26
### Added ### Added
- Restart in-game "morning" song when it is not playing and player is outside. - Restart in-game "morning" song when it is not playing and player is outside.

View file

@ -30,13 +30,19 @@ namespace SoundLoopMod
public override void Entry(IModHelper helper) public override void Entry(IModHelper helper)
{ {
helper.Events.GameLoop.OneSecondUpdateTicking += this.CheckMusicNeedsRestarting; helper.Events.GameLoop.OneSecondUpdateTicking += this.CheckMusicNeedsRestarting;
helper.Events.Player.Warped += this.ResetMusicSecretWoods;
} }
private const string WoodsName = "Woods";
private void CheckMusicNeedsRestarting(object? sender, OneSecondUpdateTickingEventArgs e) private void CheckMusicNeedsRestarting(object? sender, OneSecondUpdateTickingEventArgs e)
{ {
// Don't do anything if we're at the title screen
if (!Context.IsWorldReady) if (!Context.IsWorldReady)
return; return;
// Music won't play again in the mines if this timestamp is lower than 150000. Set to some arbitrary large value.
// The skull cavern is considered an extension of the mines, so this should affect that as well.
MineShaft.timeSinceLastMusic = 999999; MineShaft.timeSinceLastMusic = 999999;
// Avoid playing morning song in the mines etc. // Avoid playing morning song in the mines etc.
@ -47,11 +53,41 @@ namespace SoundLoopMod
if (Game1.isDarkOut()) if (Game1.isDarkOut())
return; return;
// Don't start music while on the bus
// shouldHideCharacters seems to only be used for the bus, seems to be the nicest way to get this info
if (Game1.currentLocation.shouldHideCharacters())
return;
// Be extra-safe about not doing anything during an event (to protect the special cases below)
if (Game1.eventUp)
return;
// Seems to be safe to touch the current song, check if it has finished
if (Game1.currentSong == null || Game1.currentSong.IsStopped || Game1.requestedMusicTrack.ToLower().Contains("ambient")) if (Game1.currentSong == null || Game1.currentSong.IsStopped || Game1.requestedMusicTrack.ToLower().Contains("ambient"))
{ {
if (Game1.currentLocation.Name == WoodsName)
{
// The music for the secret woods is a bit of a special case.
Game1.changeMusicTrack("woodsTheme");
}
else
{
// General case, let the game figure out what song to play.
Game1.playMorningSong(); Game1.playMorningSong();
}
this.Monitor.Log("Restarted music"); this.Monitor.Log("Restarted music");
} }
} }
private void ResetMusicSecretWoods(object? sender, WarpedEventArgs e)
{
// The game won't touch the music when entering the woods after 1800, causing the previously playing
// music to keep playing. Hence we stop it and let CheckMusicNeedsRestarting play the woods theme.
// However, after dark, let it keep playing the ambient night sound.
if (e.IsLocalPlayer && e.NewLocation.Name == WoodsName && !Game1.isDarkOut())
{
Game1.changeMusicTrack("none");
}
}
} }
} }

View file

@ -1,7 +1,7 @@
{ {
"Name": "SoundLoop Mod", "Name": "SoundLoop Mod",
"Author": "strelkasaur", "Author": "strelkasaur",
"Version": "1.0.0", "Version": "1.0.1",
"Description": "Loops the in-game music", "Description": "Loops the in-game music",
"UniqueID": "com.strelkasaurus.sm.soundloop", "UniqueID": "com.strelkasaurus.sm.soundloop",
"EntryDll": "SoundLoopMod.dll", "EntryDll": "SoundLoopMod.dll",