#S3maphore - Music Management from 2090

1 messages · Page 2 of 1

sly helm
#

Huh. I have re-release Q1, I’d swear they didn’t have ost.

#

What is directory structure tho, that is crucial

oak iron
#

these would be cool for specific dungeons or daedric realms

oak iron
# oak iron

the metadata is wrong on these or whatever its getting the names from

sly helm
#

Well I’ve been wanting some stuff for uuhhh

#

DOO

obsidian herald
#

Unc is older than Divayth

oak iron
#

NiN even released a vinyl of quake 1

#

which is why shipping the soundtrack in a mod would probably be a quick DMCA

sly helm
#

Oh yeah of course I would never lmao

#

But I can roll whatever random ass playlist if you populate the VFS

#

Yknow

sly helm
#

Yea actually this was like the one song I admit to really liking from Q1

oak iron
#

quake champions (Chris Vrenna's stuff only) lifts some stuff from Quake 1, so it feels like a more action based q1 ost in a way

obsidian herald
#

Yeah idk bro, it doesn't show up as a playlist, when Telvanni and Empire do, and I definitely have it installed since it showed up in the lua console

#

It also doesn't work in Vivec's, where there isn't a house or faction playlist either

#

For some reason it knows where to play the files, it just isn't

sly helm
sly helm
#

Sorry 😂 I've been super distracted reworking my site so I can improve the documentation, but I promise I'll make the install instructions more explicit, particularly on the nexus page

#

It's set up such that none of the playlists except the vanilla ones are included by default, that way you don't necessarily have to use my versions of the playlists if you don't like how I implemented them.

vital grotto
#

Right now in my game I have it set up that tracks can finish, but then I have all the other overrides turned on. It works really well!

I love that when I enter a city, it starts the city playlist. But if I leave, it still lets the current track continue. Especially nice if you're on the edge of a city cell, switching multiple times between the region and city cell, and the music continues smoothly.

sly helm
#

I'm glad you like it! That was reaaaaaaallllyyyyy hard to dial in. But I think it worked out well, it just didn't feel right to never let stuff be overridden

vital grotto
#

Yeah I like how it works for taverns as well, the music starts when I enter and ends when I leave.

sly helm
#

Can I ask, are you playing on a MOMW list or not? Reason being, we have this one mod that overrides most of the tavern tracks, so I actually haven't really heard any of them

#

The one place I did hear one was somewhere I felt pretty strongly shouldn't play it lol (pawnbroker)

vital grotto
#

No I'm on my own custom setup

#

Hmm I'm also getting the music in the balmora pawnbroker store it seems

#

Yeah personally I would take pawnbroker out of this list in the Inns and Taverns lua.

sly helm
#

I noticed that when I was copying the data over and thought ??? but I was focused on just copying it accurately and less making it make sense

vital grotto
sly helm
#

Hm.

#

I think this is probably where dungeon detection may come into play.

#

What you're talking about is ideally covered by that one override for dungeons

#

But I don't really have actual "dungeon" detection implemented, it just checks if there are hostiles in there and once everyone's dead, it falls back through to whatever playlist is appropriate for that area and then it can't even tell you're in a "dungeon" per se

#

I don't really wanna be that guy that has a bunch of mods that all depend on his other mods but the whole Skyrim tagging system is pretty neat, it has plenty of use cases generally but also for this mod

#

If I had tags for daedric artifacts for example, maybe I could look at playing a cool like musical sting whenever you pick one up

#

Or just immediately check if you enter/exit a dungeon

obsidian herald
sly helm
#

Yea if I didn't like them, I'd have just turned them off

#

They are def not bad

obsidian herald
#

Definitely a matter of personal taste, as all music is

sly helm
#

and playing it right off the actor instead of ambient channels adds nice effect

#

not a lot but it's there

obsidian herald
#

The only thing I don’t like is that it use the dialogue volume setting instead of music, so some random nord will always blow out your ear with “THAT’S HOW I LIKE IT. BOLD AND DIRECT”.

sly helm
#

Well it could run on the effect channel I guess but that tends to be even worse lol

#

Idk if you've played starwind but they do a lot of VA on the effects channel and it is arguably one of the mod's biggest problems overall

vital grotto
#

I noticed in my setup there's quite some variation in loudness from different music sources. Do you personally use something like MP3Gain to equalize the volume of your music tracks, or do you just accept things as they are?

sly helm
#

Tbh this is sort of a new problem set to me so I'm still figuring out how to deal with it

#

@golden swift has had some pretty good ideas but his technique is a bit advanced for my blood. I'm vaguely hopeful when cases like this arise we can handle it in umo or something

vital grotto
#

I'm going to give MP3Gain a try, lowering the volume of everything above 80db to 80db. In theory that should make the tracks a bit more consistent than the current 80-95db range. Then I'll see how that feels, especially for the combat tracks vs explore tracks

golden swift
#

Yeah some banks are louder than others. Doesn't help that the vanilla music is really loud as well.

#

MP3Gain is fine, I've used that many times on Beth games specifically.

#

We've talked about possibly doing sox umo actions to normalize everything. It'd take a lot of work to find what the baseline should be though. Once the banks for something like Total Overhaul are settled upon, it'd make it easier to start work on that.

#

Honestly, settling on a lower number, like you did, and just chopping the head off the louder tracks seems like the easiest/safest way to do it.

#

It's hard to imagine a world where turning the music slider up 100% would ever be necessary, so the upper bound is probably not super imporotant.

vague atlas
#

I just wrote a janky little script to run all the MUSE tracks through FFMPEG's loudness normalize filter and it seems to have worked okay

#

I was hoping Discord would know to embed that but oh well

#
#!/bin/fish
for i in MUSE\ Expansions/**/**.mp3
    set -f FILEPATH MUSE\ Expansions\ Normalized/(string split --allow-empty -f2-100 \/ (path dirname $i) | string join \/)
    mkdir -p $FILEPATH && ffmpeg -y -i $i -af loudnorm=I=-16:LRA=11:TP=-1.5 $FILEPATH/(path basename $i)
end
golden swift
#

marker_error fish spotted marker_error

#

What level is it normalized to? I can't read the incantation.

vague atlas
#

The specific numbers are "shit I got from the internet forever ago and works well enough"

I, i
    Indicates the integrated loudness (-70 to -5.0 with default -24.0)

LRA, lra
    Indicates the loudness range (1.0 to 20.0 with default 7.0)

TP, tp
    Indicates the max true peak (-9.0 to 0.0 with default -2.0)
golden swift
#

@sly helm, could you pin that link?

sly helm
sly helm
#

I would also pin a posix compliant version of ^ .
todd

vague atlas
#

It's not posix compliant but now it does two-pass normalization which is kind of the same thing if you don't think about it (requires you to have jq on your system)

#!/bin/fish
for i in MUSE\ Expansions/**/**.mp3
    set -f FILEPATH MUSE\ Expansions\ Normalized/(string split --allow-empty -f2-100 \/ (path dirname $i) | string join \/)
    mkdir -p $FILEPATH
    set -f OUTPUT_JSON (ffmpeg -y -i $i -af loudnorm=I=-16:LRA=11:TP=-1.5:print_format=json -f null - 2>| cat)
    set -f OUTPUT_JSON (string match -r '{.*}' "$OUTPUT_JSON")

    set -f MEASURED_I (echo "$OUTPUT_JSON" | jq -r '.input_i')
    set -f MEASURED_LRA (echo "$OUTPUT_JSON" | jq -r '.input_lra')
    set -f MEASURED_TP (echo "$OUTPUT_JSON" | jq -r '.input_tp')
    set -f MEASURED_THRESH (echo "$OUTPUT_JSON" | jq -r '.input_thresh')
    set -f MEASURED_OFFSET (echo "$OUTPUT_JSON" | jq -r '.target_offset')
    
    ffmpeg -y -i $i -af loudnorm=I=-16:LRA=11:TP=-1.5:measured_I=$MEASURED_I:measured_LRA=$MEASURED_LRA:measured_TP=$MEASURED_TP:measured_thresh=$MEASURED_THRESH:offset=$MEASURED_OFFSET:linear=true $FILEPATH/(path basename $i)
end
obsidian herald
sly helm
#

Never, Telvanni is already supported.

#

But i know what you mean. 😄

sly helm
#

The MUSE expansion may or may not hit lists, we haven’t really decided yet

#

Tbf I get the impression we’ll be adding neither Telvanni nor Empire

obsidian herald
#

I also don't understand leaving Empire, out of Dwemer, Tomb, Daedric, and Sixth House, it's definetly the most thematic and musical theory sound

sly helm
#

I already told you, nobody’s listened to telvanni and decided yet.

#

Which is also the same situation for empire.

#

But a couple mentioned listening to it and that it seemed weird, which it definitely is, it is mostly just my thoughts based on vibe check.

obsidian herald
#

YOOOOOOOO WHY ARE YOU GASLIGHTING ME

#

Aw hell naw, making me feel like Glarthir over here

sly helm
#

Okay, perhaps I should have phrased it better

#

I've listened to it for about five minutes total and really enjoyed what I heard of it, but overall we haven't collectively gotten immersed in it enough to decide one way or the other and also actually punch it up into the database. 😛

#

Really, part of it, is that atm we're a lot more interested in trying to implement some Skyrim playlists.

#

The thing with Skyrim playlists versus anything we can get with MUSE (or other morrowind packs of any stripe) is that Skyrim already has the capability for like, having certain tracks run during the day. In specific types of dungeons

#

When you kill a boss, or go to a player home, or some special event happens

#

So it would be a lot easier to do more advanced things with a soundtrack that is just, already built better, so to speak.

#

Settyness mentioned he wants to do a Dragonborn module, for example. Of course, it would be beyond insane to consider shipping the soundtrack itself, but if you happen to have Skyrim installed, and you happen to load it into your openmw install, well...

#

Doesn't have anything to do with me, then does it

#

I looked at that Daggerfall soundtrack we talked about before and weirdly even daggerfall seems to have a more "advanced" music system than mw does.

obsidian herald
#

No doubt I would love to hear watch the skies, dragonborn (Obviously), and even On the Wings of Kynareth and Reign of the Septims, but you've already coded the Telvanni cells into the game.

#

And this soundtrack, as someone who did the Entire ROHT including the TR stuff, this soundtrack is so fitting, so perfectly alien and mushroom. Obviously, this was never in doubt, the same guy who made Red, Haal, Ash, Dwemer, Daedric, and Tomb made it. It's just nonsensical not to put the house that has the most extra content and thus benefits from the inherent additive nature of modpacks to not have its own special soundtrack. This really is a no brainer. The Empire soundtrack, although I really like it, is more up to taste, but you'll never know if people like the soundtrack if you don't bundle it.

sly helm
#

Personally I'm all for having both on the lists and indeed replacing everything altogether, in some way or another.

#

I would argue though, that I actually have a pretty good idea that people want the telvanni soundtracks on the lists, sorta! It was one of the first ones anybody mentioned didn't work in here, and also if you look at my nexus comments before the first couple updates went out, everyone said the telvanni playlist wasn't working

obsidian herald
sly helm
#

Well the very first version I released didn't have a telvanni playlist because DM never ported it

#

Well

#

Okay we already talked about this

obsidian herald
#

LMAOOOOOOOOOOOOOOOOOOOOOOO

sly helm
#

What I did when I made this was I sat and went through every DM playlist we had in total overhaul.

obsidian herald
#

Yeah y'all need to get on the OpenMW subreddit

sly helm
#

There was no Telvanni playlist on TO.

#

So there wasn't one in the mod.

obsidian herald
sly helm
#

Yeah!

#

But I had every other faction, SO I got a lot of indirect feedback that people wanted it, because for the first day or two everybody who installed it was like, "Wait, why doesn't the telvanni playlist also work?"

obsidian herald
#

Well there you go, the people have spoken

sly helm
#

Untangling how MUSE vs DM playlists actually worked in comparison to one another was really hard and the first version was pretty inaccurate in that regard

#

Wanting to replace the vanilla soundtrack entirely is a little more controversial and I'd like to have some means for playlists to, like, interop with each other better

#

I reaaaaaalllyyyyy wanna add that Morrow Winds music pack

#

but the problem with regional playlists is that once you start filling those in, it essentially completely overrides the vanilla soundtrack

#

And I've gotten a comment on the nexus about that one, also, so users are noticing it as well

obsidian herald
#

Everything else is kinda dogwater

#

He got a lot better in Oblivion and Skyrim. I hope he's still composing for TES 6. Poor guy went through a lot

sly helm
#

Hey man Nerevar Rising is an incredible track. It's not about that. It's just that I wasn't quite even old enough to read when I started playing this game. I've heard this shit.

#

And I've never played with MUSE or DYnamic Music much either, mostly being into TES3MP or Starwind, either not having any capability to do that or just having no soundbanks/interest to make them

obsidian herald
#

You know how every main theme is an interpolation of Nerevar Rising

sly helm
#

Plus the way the explore playlists work fundamentally means nothing else interesting is happening that a playlist might respond to, right? So from that perspective I feel like not going crazy on the playlists means the mod goes underutilized

sly helm
#

A lot of musicians will do that in their art and it's actually something I really appreciate

obsidian herald
sly helm
#

Like here are my current thoughts and ideas about this thing I did a very long time ago

obsidian herald
#

I was saying that the rest of the exploration and battle music aren't as good as Nerevar Rising

#

Like Harvest Moon and On Kynareth's Wings are immedietly way better in Oblivion

#

That's why so many people replace Morrowind's soundtrack

sly helm
#

Yeah that is kinda my perspective on it. Plus the morrow winds and captaincreepy stuff are just fire - although having the taverns playlists enabled is kinda pointless atm

#

But it would be nice if we had some sort of way, maybe, to allow playlists to fall through on each other.

#

This could get weird and annoying later on down the line if like, maybe three or four people have some solstheim-related playlists

#

I think it's specifically just regional playlists overriding the vanilla ones though

obsidian herald
vital grotto
#

I personally just tossed copies of the original Morrowind explore tracks into the regional folders

sly helm
#

Hm.

#

That would not necessarily be hard to implement, I suppose, there is a dedicated function in the original builtin to get the next track out of the playlist.

#

I'm slightly hesitant to extend the playlist schema.

#

If track selection becomes more complex (introducing a similar callback functionality to how playlist selection works, probabl) then it could be costly.

#

Like in performance terms

topaz wing
#

Does Redguard playlist always take precedence over Project Cyrodiil playlist?

obsidian herald
# sly helm That would not necessarily be hard to implement, I suppose, there is a dedicated...

The playlists work great for when there's already something to weigh the songs toward a certain theme, like all the Hlaalu songs can play in Hlaalu territory, and which ones they are don't matter. However, when in free roam, suddenly it's a lot more important for the songs to match the context. The weighting would only need to be done for explore. You could have a vector with a dimension for every state that you think the songs could apply too, how magical an enemy you're facing, what part of the map you're in, what faction's quest you're doing, whether you're incumbered or not, what kind of armor you're wearing, what type of spell you're using, whether you're walking, running, levitating, or jumping with fortify acro. Then, based on whether a song is jumpy, magical, heavy, etc, you give the songs their own vectors with the magnitude of each of the dimensions how much they feel in that category. Then you project the song vector on the state vector and which ever song has the least angle and magnitude difference, you play that song. Just an idea.

sly helm
#

That's actually kind of what chop and I are disucssing right now

#

The concern isn't really so much how to do it as doing that making song resolution cost twice as much.

#

Stuff like what you're talking about, state is all handled by playlist resolution already.

#

"Explore" is not a category of things anymore, it's one playlist, it happens at the very end, when nothing else interesting is happening. If you want, for example, to have levitation tracks, and have them in a specific region, you make rules to do that.

#

The problem specifically is that when I have two playlists that could match in the same circumstance, the current priority implementation means one always overrides the other. It doesn't matter if you shuffle the load order around, rename files, change priorities, whatever, if you install Region tracks they'll always beat the explore playlist.

#

Especially when you take folder-based playlists into account you have no real hope of making song weights work anyway

#

I can't apply a weight to songs you may not have, or have added

#

I think realistically just having an RNG in the playlist state that is updated whenever tracks actually change and letting playlists define their own entire "weight" would solve a lot of this.

obsidian herald
#

Ong, we need to be able to dynamically shift the weight of songs though, so the player doesn't get overexposed. That's where assigning a vector to the songs and situation would be useful, because you could change what music is played radically

#

But it would require people to tag their music so

#

They would need to rate their music on each dimension and people ain't gon do that sadge

sly helm
#

Yeah, and it would completely destroy the idea of folder-based playlists. It's pretty much the entire reason isValidCallback exists.

#

You define whatever random arbitrary conditions in a deck that's already naturally weighted in two dimensions.

#

There really wouldn't be any point to weighting songs, all the granularity you mentioned there can come out of playback rules

#

The big benefit there would probably just be the capability to define what your chance to play is.

#

You could also probably make a playlist shuffle itself around in whatever manner it is you're describing in an isValidCallback. They don't have to be randomly selected, so... you could have something sit atop that list and move them around

#

Maybe not, I think it duplicates the original track order into some interior data structure.

obsidian herald
#

With a stored vector of the player's state, which would at least be dynamic, I was thinking it might head off audio fatigue, that was my thinking at least

sly helm
#

Like there are time of day rules, weather rules, you can check if the player sneaking, and some rng would help spice it up a lot too as would a couple of the combat-related rules you mentioned

#

The MUSE playlists don’t behave that way because they’re meant to be accurate reproductions of the originals.

#

No but I’m gonna add some rng to the regional playlists and maybe take a closer look at the muse ones to see if it permutates them at all.

#

In the meantime all you can really do is either disable the regional playlists or shuffle your tracks around.

#

oh yeah dude totally.

obsidian herald
sly helm
#

uhhh....

#

MRs for goon detection welcome

vital geyser
#

0.50 milestone

#

the only way to overthrow mwse hegemony is to get loverslab fully onboard

sly helm
#

okay, look

#

Hypothetically speaking

#

If someone ported that one thing, uhhhh

#

God I'm glad I don't remember the name.

#

There is a classic MWSE mod where you can bang, and it has a full suite of animations

#

Now, the way I would approach this, is by using the builtin S3maphoreEnv which is now passed into every playlist in the latest version

#

With this, a playlist file could do a call to I.AnimationController.registerTextKeyHandler and in fact, play special boning music.

#

fargoth removes his shirt.

#

DUN DUN DUN DDUUUUUNNNNN

#

cmon.

#

I have given you all the technology

obsidian herald
sly helm
#

Playing event-based tracks is another thing I'd like to add some internal api surface for, I'm just not exactly sure what the best way to implement it is.

#

Somebody was also asking about how to add silence tracks and I thought that would be a nice feature for the next patch.

vital geyser
#

adjustable variable-length silence between tracks would be very nice

#

currently i've just been putting a bunch of silent mp3s in my music folders but that's only so effective when you have a bunch of tracks

sly helm
#

With track silencing, that one bothers me in terms of like, how will the user interact with it?

#

I'm idly thinking maybe what you could do is have a default base duration, playlists can define an override, and then users set an upper and lower multiplier in their settings, and it randomly picks which when a track ends

#

I don't want it to be complicated but you want some granulairty

#

Maybe it shouldn't actually happen at the playlist level though.

#

maybe instead you just have the min/max/silence-at-all settings

vital geyser
#

i would say min/max/toggle and like, chance for silence

#

i think having playlist-level settings could be useful but

#

more for like the playlist curator than the user

sly helm
#

I'm skeptical playlist creatores would care either tbh

vital grotto
sly helm
#

hm, that's gotta be a bug 🤔

#

Songs should only re-trigger like that when you're actually changing playlists, specifically going from a lower to higher priority playlist.... Maybe there are chunks of the town where my name resolution fails

#

I'll be perfectly honest I have been pretty sure this entire time it wasn't 100% correct but hadn't found any edge cases where I was proven wrong and thus let it slide 😄

topaz wing
#

Feature request: (option) when changing from exterior with non-default playlist to interior with default playlist to not change the playlist. It would allow to "inherit" playlists from exteriors w/o setting that up explicitly.

sly helm
#

That's a thing.

#

Sorta.

#

wait, no, yeah, that's a thing.

#

There are two separate settings controlling that.

topaz wing
#

Playlist override?

sly helm
#

Yeah, one for hostile interiors and one for friendly interiors

#

There's not an explicit check that something is a dungeon atm so it literally just looks to see if the cell has hostile actors and >= 1 is considered a dungeon

#

meaning after you've cleared a dungeon out the other setting will apply. By default, dungeons are set to override because that's how skyrim does it AFAIK

topaz wing
#

Thanks.

inner crypt
#

I get this error when starting in Arrille's trade house with OpenMW test mode:
[11:43:24.771 E] Can't start L@0x1[scripts/s3/music/core.lua]; Lua error: [string "scripts/s3/music/core.lua"]:180: attempt to index field 'cell' (a nil value)

sly helm
#

I’ve seen this a couple times in frame logs, but it shouldn’t meaningfully affect anything I don’t think.

#

There’s a frame during load where you exist but you’re not in a cell yet.

inner crypt
sly helm
#

onFrame

#

Pretty much that entire script is 700 lines of onFrame except the anonymous onTeleported/onInputPressed at the end

inner crypt
#

maybe you could add a simple test "self.cell and..."

obsidian herald
sly helm
#

ahkshewally, the script does stop execution during cell transitions.

#

But starting the game does not count as a cell transition. 😄

#

I'm gonna patch it, but it's minor and shouldn't affect anything.

#

Some playback rules require an up-to-date list of statics, so playlist changes can only occur, at minimum, on the frame after a cell transition is finished. For purposes of the script, this just means the cell changed, and not necessarily teleporting.

obsidian herald
#

I bow down to you sir

sly helm
#

You would not be bowing if you could see just how incredibly stupid the expression on my face is rn.

sly helm
#

I won't.

obsidian herald
#

Damn

sly helm
young fulcrum
sly helm
#

Mods are free, you gotta pay for the rest

#

I have a subscription plan tho

obsidian herald
#

I'm willing to pay

sly helm
#

more'n you got, sweetheart.

obsidian herald
wise kelp
#

You should turn into Crassius mode whenever someone requests a mod

#

Hey could you add a better journal menu to OpenMW?

sly helm
#

I had a phase where I did that for quite a while

#

I don't think you two realize who you're talking to in this regard

#

it started with fabio but like, don't ask me why

#

because I couldn't tell you

#

I got, uh, bout 111 of these

#

Looks like some I didn't do yet tho

#

I dropped this one on someone one day when they were raging at me and I no longer felt like dealing with it

#

They did not, in fact, chill

sly helm
#

I think they were mad the api wasn't moving fast enough or something

#

tbh I don't remember, I posted that and I went to bed.

#

It was not something I should have done, but, it was pretty funny nevertheless

#

Nobody's perfect, eh 😅

obsidian herald
#

Will there be a setting to disable combat music for enemies below a certain level, and enemy blacklist for those filty sky skeevers?

wise kelp
#

though i rarely argue with anyone online outside of Twitter, and that's for entertainment

obsidian herald
sly helm
#

I don't necessarily like the idea of doing that at the setting level

#

in MUSE combat playlists are implemented with level-based rules

#

so like they just, will say, "don't do this playlist, ever, if there are no enemies within this level or health range"

obsidian herald
sly helm
#

i mean that level of specificity should definitely happen at the playlist level

#

This is why the mod is designed the way it is, in the end

#

It specifically does not make many decisions of its own, you feed it all the logic yourself through the playlists

#

If you genuinely want to not have combat music specifically for racers, it's this simple:

local Racers = {
  ["cliff racer"] = true
}

---@type S3maphorePlaylist[]
return {
  {
    isValidCallback = function()
      return Playback.state.isInCombat
        and not Playback.rules.combatTargetExact(Racers)
    end
  }
}
obsidian herald
#

Oh my god

#

A vampire playlist for fighting vamps and vampire tombs

#

Imagine beating the shit out of raxle Burne with Vampire Killer playing in the background or hearing lost painting in the Quarra nest

vital geyser
#

also it turns out the kenshi music files actually work amazingly well with s3maphore even if it can't do the same kind of layering kenshi's own system doe

#

the sparseness of the specifically curated tracks can blend into each other beautifully to make little procedural tunes

sly helm
vital geyser
#

after spending a lot of time working with dynamic sounds playlists the past few days i'm really coming into a new appreciation for how s3maphore handles it

#

if i could just pull sound files at random from a directory instead of needing to define them all individually i feel like it would probably add at least six years to my lifespan

marsh wind
#

Has anyone got this mod running on SteamDeck, I cant get it to play any sounds or music at all but unsure what I am doing wrong. TY

sly helm
#

Hey, there's nothing platform specific about this mod. How exactly did you install it?

#

If you have the 00 Core folder installed properly, it will at least play the battle and explore playlists from Vanilla. I would guess you are probably not actually using openmw 0.49

#

If you run the openmw launcher and check in the bottom left it will tell you (also the bottom-right of the in-game main menu)

#

Uh, wait, no sound at all?

marsh wind
#

None

sly helm
#

Are you using the AppImage of openmw?

#

This has nothing at all to do with S3maphore.

marsh wind
#

Im new to modding on linux but not modding in general.

west sundialBOT
#

Are you using the AppImage of openmw?

sly helm
#

Which also requires doing this, to level the framerates out.

marsh wind
#

Cool I will try that TY

#

I have tonnes of other mods working just this one is giving me issue

sly helm
#

No, it isn't, running the appimage is giving you this issue.

#

You can remove it, and the sound will still not work. There's nothing in this that will touch any kind of non-music sounds in any way.

#

Once you get switched over, all the sound should work.

marsh wind
# sly helm

Sorry where exactly am I putting these commands?

sly helm
#

Right click game -> Properties -> Launch Options

#

(sorry, i don't use steam for openmw, but it'll work the same.

marsh wind
sly helm
#

Oh, well, you can install it anywhere.

#

ffffffuuuuuuuuuu they are not alphabetized

#

You can use the widget on my site to do it manually or via the launcher, both should work the same way as long as you know where it is.

#

Each folder other than 00 Core and 06 Songbook of the North corresponds to a playlist from some other mod(s), either MUSE Expansions or Dynamic Music soundbanks for the most part

#

Songbook is the only module that includes the tracks because I ship them at a higher quality than the original mod did. (They're CC0)

#

00 Core will have the main mod and the vanilla Explore/Battle playlists

marsh wind
#

Great thanks! I have done this part so do I just extract the actual music files for the various play lists into the folder locations from the picture above?

sly helm
#

Nah you don't have to put the music tracks inside of my stuff at all

#

Just install them normally, as totally separate mods

#

here's how mine is set up for example, all the actual playlist files are separated from the tracks

marsh wind
#

Cool thank you. I've had to install a lot of mods manually on the steamdeck as there isn't any easy to use managers. Appreciate the help!

sly helm
#

the openmw launcher can do ti

#

.49's version is actually pretty solid

marsh wind
#

Ty

golden swift
#

Setting ~/.alsoftrc is the easiest fix.

#

At least until we can solve the AppImage stuff.

steel gyro
#

moving here from bardcraft. didn't want to spam the guy's thread. I get into the game, background music starts playing. I then perform a bardcraft song, s3maphore goes to silence. I stop playing after ~30 secs, but the music remains silent. I move through a few cells, get into combat, no music. At the end I hit F8 and music plays again.

[08:49:45.097 I] Playing "music/ms/region/ascadian isles region/bgexplore3.mp3" [08:50:10.514 I] Global[scripts/bardcraft/conductor.lua]: Starting performance (Five-Legged Festus) [08:50:10.610 I] L@0x1[scripts/s3/music/core.lua]: [ S3MAPHORE ]: Track changed! Current playlist is: BardcraftSilence Track: sound/Bardcraft/silence.opus [08:50:10.610 I] L@0x1[scripts/s3/music/core.lua]: [ S3MAPHORE ]: No translations found for track sound/Bardcraft/silence.opus [08:50:11.552 I] Playing "sound/bardcraft/silence.opus" [08:50:42.174 I] Unloading cell Ascadian Isles Region (3, -7) [08:50:42.176 I] Unloading cell Ascadian Isles Region (5, -5) [08:50:42.176 I] Unloading cell Ascadian Isles Region (5, -7) [08:50:42.177 I] Unloading cell Ascadian Isles Region (4, -7) [08:50:42.178 I] Unloading cell Ascadian Isles Region (5, -6) [08:50:42.180 I] Loading cell Ascadian Isles Region (2, -5) [08:50:42.188 I] Loading cell Ascadian Isles Region (3, -4) [08:50:42.191 I] Loading cell Ascadian Isles Region (2, -4) [08:50:42.193 I] Loading cell Arvel Plantation (2, -6) [08:50:42.204 I] Loading cell Molag Mar Region (4, -4) [08:50:53.762 I] L0x31000041[scripts/maxyari/mercycao/improvedai.lua]: [Mercy][aa_comp_amalie]: WARNING: No voice records of type GetEm were found to fit breton female character. [08:50:56.603 I] L0x31000041[scripts/maxyari/mercycao/improvedai.lua]: [Mercy][aa_comp_amalie]: WARNING: No voice records of type CombatDowntime were found to fit breton female character. [08:51:43.146 I] L@0x1[scripts/s3/music/core.lua]: [ S3MAPHORE ]: Track changed! Current playlist is

#

It's no biggie, hitting keys is what I do on a computer, but it's odd

sly helm
#

Oh, shit okay, so you do have to manually skip.

#

Weird question. Are you on vvardenfell?

#

I don’t think it should matter but I’m in anvil rn, the playlist rules there are wildly different.

steel gyro
#

ya ascadian isles

sly helm
#

Does the log actually end there? It should have a playlist name.

steel gyro
#

didn't think it'd be relevant
L@0x1[scripts/s3/music/core.lua]: [ S3MAPHORE ]: Track changed! Current playlist is: ms/region/ascadian isles region Track: music/ms/region/ascadian isles region/06. the future of house atreides (unreleased).mp3 [08:51:44.147 I] Playing "music/ms/region/ascadian isles region/06. the future of house atreides (unreleased).mp3"

sly helm
#

Ohh that’s from when you skipped?

steel gyro
#

at the very end yes

sly helm
#

Ah, I see

#

practices worked fine but I'd never actually performed before, I see this also

#

I believe...

#

I think this probably worked in the version I had published at the time when I hit up ralts but playlist transitions are a little more sophisticated now... for the most part, they won't just override each other once a playlist is not valid anymore. Most cases will wait for a track to try to finish

#

Which I guess must not be happening because I've been sitting here for a while now. I'm scared to check the duration of the silence track, ngl.

#

tl;dr @rugged hedge you can probably fix this by just switching to using S3maphoreToggleMusic event. self:sendEvent("S3maphoreToggleMusic", Performer.playing) Or something to that effect. I wouldn't mind to patch it myself, but I am very tired.

#

More generally speaking between explicitly toggling playlists and playback being enabled in the first place, there should be enough frameworking here to eliminate the concept of silence tracks altogether

#

💡 !

#

an mwscript global float whose value indicates the length of time for which playback should be stopped

#

Let's say a short so we don't have to deal with floating point

#

Anyway, back on topic, S3maphore itself is actually working as intended in this case. Because of how playlist transitions work now (this is configurable ! Changing one of the track skip-related settings would also fix this ingame, but I wouldn't do that for this case), higher-priority playlists will typically try to finish their playback before they surrender control back to whichever one is valid at the time

#

Nothing has explicitly stopped this track, except you pressing F8, so it's going to run all the way through and then do whatever comes after. That's what special playlists are meant to be, in the end (priority <= 50)

steel gyro
#

in non-s3maphore situations I stop the performance and the game music starts up again immediately, so I'm not sure what the difference is there, the game is dumb as a bag of bricks but handles this as expected

sly helm
#

Oh, well, Idunno what exactly it does if you don't have s3maphore installed now that you mention it

sly helm
# sly helm

But this will only ever happen if you do have it installed, and Bardcraft registers this silence playlist

#

I'm certain that I broke this doing feature requests 😅

#

The setting that controls this on my end is trying to prevent, like

steel gyro
#

maybe bardcraft should be dumber about this and not register stuff

sly helm
#

If you're in balmora and the hlaalu playlist is playing, you don't want it to suddenly fall through down to the ascadian isles playlist as soon as you go out of town

#

So higher-priority playlists will not allow lower-priority ones to interrupt their playback.

steel gyro
#

yeah this is a bit awkward which muse handled reasonably well (at least from a user experience standpoint)

sly helm
#

I kinda would appreciate having an actual muse user explain it to me a little because I've sorta just been analyzing the playlist jsons like an archaeologist looking at dinosaur bones

#

I have no idea what the feel of it is

#

But one weak point of s3maphore right now is that playlists don't really mesh well together. They're very strict about which is in control at any given moment

#

This apparently is all how skyrim's playback system works but I can't say anything about that one way or another except that I vaguely remember some discussion about this in MR comments, when music was first dehardcoded

steel gyro
#

I frequently do not want the current track playing all the way to the end, like when I'm entering/leaving an inn, I want immediate override which I did with some switches in muse. Unfortunately I saved the music folders and nuked the config stuff

sly helm
#

Oh well there is a switch for this behavior

#

I don't like it either personally

steel gyro
#

yeah but that does it everywhere right?

sly helm
#

There are three based on where the transition happens

#

overworld, friendly ints, dungeons

#

Dungeon detection is not great but it's vaguely based on what I could gather from the muse playlists

steel gyro
#

tilesets and such?

sly helm
#

No for dungeon detection I actually literally copied the muse code

#

It checks for NPCs with fight >= 90 and creatures >= 83

#

And if either of those is true then it is considered a dungeon

steel gyro
#

"folder" : "Tavern", "requireHostiles": false, "queued" : false, "priority" : 500, "instant" : true, "cancelOnExit": 1, "cellNamePart":

so for taverns I had this, "instant" told it to start playing immediately (as opposed to normal finish-track behavior), "cancelonExit" told it to stop immediately when I exit the tavern (again as opposed to normal finish-current), and for matching I used partial cell names.

#

in most cases you do want "finish what you're playing" behavior I think, it usually going from interior to exterior or vice versa that you might want a more abrupt change and switches to support that

sly helm
#

oh so that's what those do.

#

I kinda had guessed so but it's nice to be sure.

#

What is queued?

#

S3maphore actually does have a system kind of like this. But playlists are only using the default behavior atm

#

there is an interruptMode param on playlists

#

The way I've organized it is by Explore/Battle/Special, so based on the vanilla ones

#

Special playlists specifically may never be interrupted, but otherwise, if the playlist priorities change then this is a fallback check that happens underneath it to decide whether playback should interrupt

#

So for example you could short-circuit the Taverns playlist to always interrupt regardless of the setting by making its interruptMode = InterruptMode.BATTLE

steel gyro
#

I thought I knew what it was, now I'm looking at my configs and I'm not so sure anymore, I downloaded the mod and looked at the templates and I kind of feel "instant": false is the same as "queued": true? But then why two flags?

sly helm
#

My thoughts exactly

steel gyro
#

but if I set interruptMode = InterruptMode.BATTLE and exit the tavern?

sly helm
#

normally it will go both directions

steel gyro
#

nice

sly helm
#

Whatever is on the outside will probably be interruptMode.EXPLORE, and it'll fall back down to that

#

Hypothetically someone could use BATTLE for an exterior playlist for the same reason though, and then it's down to the playlist's priority

steel gyro
#

yes priority escalation was a problem with muse mods/playlists

#

everyone wanted to make sure their new shiny mod's playlists... played so let's set priority to insanity numbers

sly helm
#

I'm hoping that this design counteracts that somewhat

#

Playlists have a pretty straightforward range

#

They're meant to coexist at the same priority level, in fact it will run better if they do (possibly)

#

It also goes down and caps at a thousand

#

Which itself is drastically increased from the builtin script's version... I think it goes to 100 and doesn't use Special as a playlist type at all

vital grotto
#

I noticed a thing. I don't know if this comment is from you or from original MUSE. As it says here, Dagoth Ur folder takes priority over Dagoth folder, which explains an issue I had. I had the MUSE Sixth House expansion installed, which puts a finalbattle.mp3 track in the Dagoth Ur folder, and some other combat tracks in the Dagoth folder. But with S3maphore at least, it will just pick finalbattle.mp3 all the time when fighting the sixth house due to the folder priority thing.

sly helm
#

That is all me lol

#

Hm.

#

I can double check it but this… seems right. Sorta.

#

I’m sorry, but I’m not really equipped to do this myself (time)
What exactly did MUSE do here, if you can check?

#

I am fairly sure this is an accurate representation of how that one runs in MUSE. I think

vital grotto
#

Looks like MUSE only uses the Dagoth Ur folder for the battle with Dagoth Ur, and the Dagoth folder for fights with other sixth house related enemies

#

So I'm guessing if I take the Dagoth Ur folder out of s3maphore's Muse Sixth House.lua, it will make sure all the Sixth House fights use the Dagoth folder with the multiple combat tracks. For Dagoth Ur himself I'm using this other mod which should take care of Dagoth Ur himself 😄 https://www.nexusmods.com/morrowind/mods/56809

Nexus Mods :: Morrowind

Overhauls the Facility Cavern fight against Dagoth Ur into a prolonged 4 phase boss battle.

sly helm
#

Okay. Now I remember what the deal is here.

sly helm
#

If you look really closely at this image you may see the issue.

#

Set the latter dagoth-only playlist to run theManHimselfRule

#

I remember being really confused by this when I first opened… DM?

#

I can’t recall which, untangling playlists was a smorgasbord of fuck.

#

Anyway I didn’t finish updating that playlist after I fixed some of the other aspects.

#

As is they are for all intents the same playlist with different folders.

#

O_O

rugged hedge
#

if anything i could probably still play the silence track and just toggle s3maphore off once the fade is done

sly helm
#

Well, whatever you’re doing for practice works perfectly.

rugged hedge
#

huh, the logic isn't any different

sly helm
#

But my memory is a fallible thing.

rugged hedge
#

it might be to do with being inside or outside a tavern, i was running into some issues with the tavern playlist's overrides myself after updating s3maphore

#

don't remember the specifics either xD

#

but yea i'll just switch to toggling tbh

vital grotto
sly helm
#

It was kind my fault in fairness

#

When I started, I simply copied all the DM playlists into the S3maphore format. I assumed at the time these playlists were accurate. They were not, in fact, accurate.

#

Then I finally realized because someone said an expansion wasn't working which I was certain should have... then I realized it was all folder based. But they still, all had to be rewritten as a result, and I spent...

#

Idunno, most of a day trying to understand how MUSE playlists worked. Had never seen one before.

#

As it turns out you shouldn't try to copy a system you have never used whilst also doing zero research into the subject

#

But, this is modding ! 😄

hearty depot
#

What's the deal with the fade duration setting? I can't seem to get it to do anything. Supposedly there's also a way to specify the fade duration in the playlist but I don't see anything about it in the documentation and there's definitely nothing set in the playlist files I'm using because I wrote them myself.

fallow bough
oak iron
#

thats the neat part, openmw can just load the files and play them already

sly helm
#

Yeah we don't need perms

#

You just have to install it and have playlist files

sly helm
#

But that only works if you have one of the fade settings enabled

#

By default only transitions into hostile areas fade, IIRC

#

Well, kinda. I should probably have been a little more awake before answering this. Oops.

#

The fade duration is a parameter of the playlist itself, fadeDuration, if that doesn't exist the setting is used. In some cases you may not really notice the fadeout as much from the tracks being instantly interrupted.

There we go.

hearty depot
# sly helm Actually they do nvm: https://gitlab.com/modding-openmw/s3ctors-s3cret-st4sh/-/b...

Okay I figured it out. It actually doesn't work at all currently because the wrong parameter is getting passed to ambient.streamMusic. The second parameter needs to be a table with the fadeOut variable in it (see: https://openmw.readthedocs.io/en/l/reference/lua-scripting/openmw_ambient.html##(ambient).streamMusic ). So line 572 in core.lua

ambient.streamMusic(trackPath, newPlaylist.fadeOut or FadeOutDuration) - this doesn't work, because you're just passing a number as the second parameter.

ambient.streamMusic(trackPath, {fadeOut = newPlaylist.fadeOut or FadeOutDuration}) - this seems to work as expected, now it's a table with the fadeOut option in it.

sly helm
#

Y'know, I noticed that at one point and thought it was weird but brushed it off.

#

Fair enough, will patch after work. Thanks for the help!

#

It might-possibly be worth reporting upstream also or maybe not. That's an original bug that technically sorta still exists in the builtin music script

hearty depot
sly helm
#

No, it is supposed to be a table, I mean, the builtin openmw music script has the same bug

#

S3maphore is built off of it almost entirely. But none of the playlist stuff is used there

hearty depot
#

Ohhh I didn't know that

steel gyro
#

the setup of vanilla regions is great, there's an id pointing to a folder and a region check and that's it, I can just dump my mp3s in the folders and happy days. The Tamriel Rebuilt setup is very different, it's all "only play these specific tracks" which is a pain to change (have to edit the track list). How can I set up the TR side of things so I can just point it to a folder to play as well (for region playlists)

sly helm
#

Yea tbh I'm not a super huge fan of how they're laid out myself, I'd like to change it, but the model needs poked at a bit to be more flexible

#

So here's the aanthirin playlist, right:

    {
        id = 'Tamriel Rebuilt - Aanthirin',
        priority = PlaylistPriority.Region,
        randomize = true,

        tracks = {
            'Music/MS/general/TRairdepths/Dreamy athmospheres 1.mp3',
            'Music/MS/general/TRairdepths/Dreamy athmospheres 2.mp3',
            'Music/MS/region/Aanthirin/Aanthirin 1.mp3',
            'Music/MS/region/Aanthirin/Aanthirin 2.mp3',
            'Music/MS/region/Aanthirin/Thirr.mp3',
            'Music/MS/region/Aanthirin/Thirr 1.mp3',
            'Music/MS/region/Aanthirin/Thirr 2.mp3'
        },

        isValidCallback = function(playback)
            return playback.state.self.cell.region == 'aanthirin region'
        end,
    },
#

It's set up this way with the hardcoded track paths so they can all reuse dreamy athmospheres

#

anyway you'd change it like this:

    {
        id = 'MS/region/Aanthirin/',
        priority = PlaylistPriority.Region,
        randomize = true,

        isValidCallback = function(playback)
            return playback.state.self.cell.region == 'aanthirin region'
        end,
    },
steel gyro
#

yeah but there's also a thirr list because I don't think there's a region called "aanthirin region" (it's thirr valley region) and the thirr list contains three regions

#

so that one would win? I think that one plays

sly helm
#

The idfield should be the folder in which the tracks are

steel gyro
#

cell.region == 'aanthirin region' is the one

#

no such region

#

but I'll try with this edit

sly helm
#
2:12:27 s3kshun8@UNDEAD-ASYLUM TamrielData/00 Data Files √ % tes3cmd dump --type REGN ./Tamriel_Data.esm 
WARNING: Can't find "Data Files" directory, functionality reduced. You should first cd (change directory) to somewhere under where Morrowind is installed.

Record: REGN "aanthirin region" Flags:0x0000 ()
  NAME: ID:Aanthirin Region
  FNAM: Name:Aanthirin Region
  WEAT: Clear:35  Cloudy:25  Foggy:5  Overcast:15
    Rain:15  Thunder:5  Ash:0  Blight:0
    Snow:0  Blizzard:0
  BNAM: Sleep_Creature_ID:T_Mw_RStat_AanthirinSleep
  CNAM: Red:102  Green:165  Blue:217  Unused:0
 *SNAM: Sound_ID:wind calm5  Chance:4
 *SNAM: Sound_ID:wind calm4  Chance:4
 *SNAM: Sound_ID:wind calm3  Chance:4
 *SNAM: Sound_ID:wind calm2  Chance:4
 *SNAM: Sound_ID:wind calm1  Chance:4
 *SNAM: Sound_ID:rocks2  Chance:5
 *SNAM: Sound_ID:rocks1  Chance:5
steel gyro
#

hmmm did that change or am I hallucinating

sly helm
#

Well, something seems to've happened:


Record: REGN "thirr valley region" Flags:0x0000 ()
  NAME: ID:Thirr Valley Region
  FNAM: Name:Coronati Basin Region
  WEAT: Clear:15  Cloudy:45  Foggy:10  Overcast:10
    Rain:15  Thunder:5  Ash:0  Blight:0
    Snow:0  Blizzard:0
  BNAM: Sleep_Creature_ID:T_Mw_RLvl_ThirrValleyLand+0
  CNAM: Red:183  Green:176  Blue:130  Unused:0
 *SNAM: Sound_ID:wind trees1  Chance:4
 *SNAM: Sound_ID:swamp 1  Chance:4
 *SNAM: Sound_ID:swamp 2  Chance:4
 *SNAM: Sound_ID:swamp 3  Chance:4
 *SNAM: Sound_ID:howl1  Chance:2
 *SNAM: Sound_ID:howl2  Chance:2
 *SNAM: Sound_ID:howl3  Chance:2

#

@devout oar made some edits to the playlists in these specific areas IIRC so he would know better

#

but yea just remove the track table completely and then make the id the folder the tracks will be in, and they'll work

#

I'd like to make the actual playlists do that, but I need a means to insert tracks after the fact first

steel gyro
#

I can't really think of any situation where I want to manage lists of individual mp3 files as opposed to pointing it to a folder to play whatever is in there

sly helm
#

well, this one is a good example, really

#

the TR/PC playlists are like this so they can all use the airdepths tracks to fill them in

#

er, not quite all of them I guess but most of them

#

I'm thinking maybe, because the problem that's trying to solve is repetitive music, maybe I could keep a queue of "exhausted" playlists, so they expire after a while, and then every so often become usable again

#

I've noticed it too actually, playing PC

#

it's not so much you want to have the hardcoded list, as that it's the only way to have extras

steel gyro
#

I have several thousand of MMO mp3s lined up, exhaustion is not a worry but I may be an edge case there

sly helm
#

uhhh yes lol

steel gyro
#

playlists being cycled out after overplay and getting back into play later is good though

#

looks like the TR team did some more region shuffling or I am misremembering, I am sure "aanthirin region" used to be called "thirr valley region"

#

guess they moved it around to account for the new regions (which I now realize I will need playlist/folders for)

sly helm
#

I'm reasonably sure it did because I distinctly remember looking at ronik's changes and thinking wtf is going on here, but didn't think twice about it

#

But one of the TR devs went through my version of these playlists before i published, so... it should at least be right as of the last update

steel gyro
#

whoops (in my defense this is years of hoarding and categorizing using muse)

sly helm
#

Jeez, man.

#

Hey if you got any playlist ideas I'm super down 😄

steel gyro
sly helm
#

I've been wanting to do an extended one based on the daggerfall chiptune playlist for MG/FG

#

That has a whole album with like 77 tracks

steel gyro
#

with a badcrt filter and some ps dithering I could see it

steel gyro
# sly helm anyway you'd change it like this: ```lua { id = 'MS/region/Aanthirin...

this works, cheers! Just have to enter every region and it's good to go. I don't really have playlist suggestions, I'm happy with unique regional music + cell-based towns (imperial/hlaalu/redoran/etc) + tile-based dungeons (tomb/cave/dwemer/daedric) and everything playing from folders where you can put whatever (easy to manage too), honestly think you don't need much more for 99% of the game, bunch of combat music maybe but special enemy playlists don't do much for me because I'm not focused on music in combat.

radiant flare
#

I've been using dynamic music with the plugin for all the MUSE playlists but just saw this and want to try it out, how do I go about installing it? Do I just drag and drop all the playlists I threw into dynamic music?

#

Nvm I see there is a bain installer :')

radiant flare
#

Don't think this is compatible with Better Sounds, at least I can't get anything but the default Morrowind explore OST to play. Tried tweaking settings through the scripts in game, changing directories, etc without any luck

sly helm
#

All the s3maphore playlists work the same way dynamic music ones do

#

You're not supposed to copy anything into the folders, although you can I guess

#

You do need to install like, the MUSE Expansions, or CaptainCreepy's MUSE Music Pack though too

#

Only 06 module comes with music

radiant flare
#

I downloaded each of the MUSE expansions manually, which folder in s3 do I put those in?

#

Or does it matter, as long as I have them in the directory?

sly helm
#

Each playlist has its own directory like the muse ones

#

All you should have to do is download and extract one of them, and "Append" it in the launcher

radiant flare
#

Alright great, it does work with better sounds and I was able to get it to play the MUSE expansions

sly helm
#

I pinky promise I'll update this for you guys soon and add links to supported mods and stuff

#

Going through a lot rn but cooking next build in my head, will try to squeeze it in this week, but no promises

steel gyro
#

The mod works really well as is, just finished integrating the world of warcraft OST from all expacs (~1300 tracks, 130+ hours), I don't think I'll ever return to WoW and Blizzard but hearing lament of the highborne in necrom is peak

sly helm
#

I mostly just wanna make some dope playlists

#

there are a couple minor bugs/features to address but mostly playlists and docs tbh

#

I have had to tell a few too many people which mods exactly are compatible atm and I keep forgetting which ones I need to make compatible too lol

steel gyro
#

I was thinking about playlists, like, it maybe would be nice to have daytracks and nighttracks for areas with calmer/more mysterious tracks playing at night but I am not ready to rejigger all tracks once more

sly helm
#

yea there's rules for that

#

this is kinda why it's set up the way it is though with the bain archives

#

cause MUSE playlists aren't really expressive enough for you to do that unless I changed them myself, which was not the idea at all

steel gyro
#

I kinda just installed the core and started editing playlist stuff

sly helm
#

every playlist I ship is 1:1 with its original implementation (or, wants to be)

#

but downside of that is that by default it never actually uses most of its capability 😄

#

Main reason I want to do Lorkhan is openmw builtin script with this whole playlist concept is supposed to be how skyrim music works to some degree

steel gyro
#

yeah and a lot of those music expansions were really just "play only these specific tracks" and frankly none of them have enough tracks to remain interesting for long

sly helm
#

So really, we should be making playlists based on Skyrim mods and not morrowind ones

steel gyro
#

I will never cease advocating for folder-basic music management, having to fiddle with playlists is terrible

#

point it at a folder, manage the folder

sly helm
#

All the skyrim stuff is folder based too it just has way more rules/contexts

#

There are specific musical stings that play depending on what category of dungeon you're in, for example

#

right when you enter

#

and there are others when you get to the end

#

plus it also uses time-of-day stuff liberally

steel gyro
#

oh yeah, I mean, at some point you hit what I consider OCD levels of attention to detail and I kind of get off the train there, I just want some vaguely-relevant tracks playing

sly helm
#

Check the file preview on this

Nexus Mods :: Skyrim Special Edition

'What if we replaced Skyrim's music with young scrolls?' Now you can. A complete reimagining of the game's soundtrack with nearly 3 hours of lore-friendly and high quality original music for the base

#

most of it is rather muse-like but they get weird with it in some places, like I don't know what the a/b/c subdirectories are supposed to be (times of day like s3maphore uses 0-3?)

steel gyro
#

first thought "yeah interesting" second thought "fucking xwm"

sly helm
#

we got ffmpeg out here baby

#

I checked ffplay, these should be legit

steel gyro
#

oh yeah it's trivial to transcode but it's just annoying

sly helm
#

Todd gives us nothing without curling his paw

steel gyro
#

kind of have run skyrim to see what they're doing exactly, I can't make it out from desc. or file structure

#

I have no wish to return to skyrim at this time

sly helm
#

See that's part of my problem too todd

#

I installed skyrim recently, even, to test BSA extraction in this thing I wrote

#

But then I said, nah

steel gyro
#

[libmp3lame @ 0x556ccebb96c0] Queue input is backward in time [mp3 @ 0x556ccebbcb80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 3933359 >= 3932463

I said trivial and it seems to work but these are some odd messages

sly helm
#

uhh

#

you transcoded them yourself?

#

or?

steel gyro
#

I was lazy and ran find -name "*.xwm" -exec ffmpeg -i {} -acodec libmp3lame -ab 320k {}.mp3 \;

sly helm
#

just use the originals

steel gyro
#

openmw plays xwm now?

sly helm
#

it supports whatever ffmpeg supports

#

In theory you should be able to run mgs3 cutscenes

steel gyro
#

ah right, never tried it because I always tried to keep things in sync with og mw.exe and muse

oak iron
#

its the same playlists as skyrim proper since its a replacer

#

you could probably just open skyrim.esm in xedit and see

steel gyro
#

I looked around but I don't think your transmog/glamour mod has a dedicated thread or a nexus page; just wanted to note that sometimes when I open the transmog menu (not always), luasync kind of goes crazy with intermittent big bursts of activity, you can see the graph in pic 1 (no problem, before opening menu) and graph in pic 2 (the block pattern after opening and closing the menu) which causes noticable ingame stutters when it happens. Don't see anything in the logs about it.

sly helm
#

Ohhh yeah. That UI is very unoptimized

#

I didn't know how not to make them run like shit at the time. The object highlights cause the whole thing to redraw

last schooner
#

Hey! Thanks for the great mod! I can now enjoy TR and PT with their proper soundtracks!
It took me a few minutes to figure out why the music wasn't loading at first. In the readme file included in the Nexus download, the installation steps list content=s3maphore.omwscripts , when I can see in the git changelog that the file was renamed to S3maphore.esp
After changing that everything worked smoothly

sly helm
#

Oh, thanks for calling that out! I must've forgotten to update readme when I switched to embedded records for the script

cloud shell
#

Sorry if not the right place to ask but how would I expand the Vvardenfell soundtrack? I use s3maphore with the TR original soundtrack, but are there any nice playlists for Vvardenfell? What playlist should I add?

sly helm
#

Use the MUSE playlists, module 01. You can mix and match mods from the MUSE expansions (this is literally what they are called, by scipio) and most other MUSE packs will work out of the box as well.

#

I personally am in love with these two and will not play without them:
https://www.nexusmods.com/morrowind/mods/51734?tab=files

https://www.nexusmods.com/morrowind/mods/51769

Nexus Mods :: Morrowind

An implementation of my album on morrowind. Requires MUSE 2 by Rytelier.A collection of 37 songs located in their appropriate cells, but free to be customized at will.

Nexus Mods :: Morrowind

Adds music from the popular music expansion mods for TESV:Skyrim by CaptainCreepy AKA OrganicView using the MUSE 2 music system.

#

Alternatively, you can just enable the muse playlists and put your own tracks in the right folders, most existing playlists are either region based or faction based

#

So, for Sheogorad region for example I believe the folder path is: music/ms/region/sheogorad

cloud shell
#

Just what I needed, ty!

fallow bough
sly helm
#

Enable the 01 MUSE playlists data dir

#

Download a MUSE mod like ^

#

Active playlists will be visible in its settings menu, although ones without any tracks found will be greyed out, so you can't disable em

fallow bough
#

"MUSE The Morrow Winds Of Resdanya - A Morrowind Inspired Music Alb" mod doesn't have that dir for me 😵‍💫

sly helm
#

Oh sorry it's 03 Muse Expansion Playlists

#

That's from S3maphore, muse mods don't ship that

#

For muse stuff you just add it like any other mod

fallow bough
#

ah I'm running an older version of s3maphore

#

that's why I'm so confused lol

#

Can openmw play .xwm files?

sly helm
#

Yea I was goin over this with acid a couple pages up

#

I've been desperately wanting to make some playlists based on LORKHAN so you can just smack that in there like Morrowind mods

#

Anything ffmpeg can decode, openmw can, which is... everything I can think of, anyway

fallow bough
sly helm
#

If you need any help on playlist creation I gotchu

#

Playlists now don't even need to require most stuff

#

I haven't had a chance to document this yet but this table is passed into every playlist

sly helm
#

Somebody mentioned one of the regional playlists has an incorrect name.

#

Anybody remember what it was? 😅 I can't find it!

#

Ah! I knew it was sheogorad.

cunning void
#

What exactly is the difference between this and dynamic music?

sly helm
#

The playlist mechanics s3maphore uses are far more open ended than either MUSE or Dynamic Music, and unlike both mods it will not cause freezes in your game

#

One of the biggest advantages is that most S3maphore playlists are folder based, so just like the normal Explore/Battle folders, you can just smack songs in the right folders and they work automagically

#

Speaking of which, 0.54 is now available!

  • fix sheogorad playlist
  • fix fadeOut setting
  • fix overriding playlists causing infinite throws
  • add bbl drizzy playlists -> place your favorite Drizzies in music/s3/drizzy to hate Drake whilst exploring sixth house areas/dungeons
  • oh yeah also swedish translations
sly helm
#

The power is in your hands my son

#

I cannot distribute BBL drizzies myself

#

Actually some.... zealous, let's say politely nexus moderator deleting the bbl drizzy mod is why I made my own website to post stuff on anyway

#

He will live on on my credits section forever

sly helm
#

No I refuse to even learn how to type extended characters on my keyboard tbh, the swedish translations are courtesy of @urban pelican

#

Mais, je parle le français assez bien

#

Mesdames l'aimé

radiant flare
#

Gotcha haha

urban pelican
# radiant flare du är svensk? 😄

There are probably over a dozen or so Swedish mod translations I've done by now. Most of them are mods by johnnyhostile, like #1194631593692778587 and #1192953808163180595. It's just a silly fun thing to do I guess. The Swedish translation of OpenMW itself is done by me as well.

sly helm
#

Hey btw lysol, I had an excuse to bother you (since you also did UiModes)

urban pelican
#

Np hit me

sly helm
#

What would be a good equivalent for slimline or streamlined

urban pelican
#

In Swedish? Literally speaking, streamlined is strömlinjeformad (which in turn is literally streamline-shaped).

#

Slimlined however... Depends on the context.

sly helm
#

I'm making stripped down version of ui modes

urban pelican
#

Ah

sly helm
#

uiModesSlim

urban pelican
#

Right. Strömlinjeformad could make sense. Like, you have a setting called "UI Modes" with the options "Normal" and "Streamlined", that could be translated into "Gränssnittslägen" with the options "Normalt" and "Strömlinjeformat". Perhaps avskalat could do instead of slimlined, which would mean something like stripped down.

#

But have a go and I'll figure something out.

sly helm
#

Certainly not even a novice but strönlinjeformat seems a bit... idk, out of context?

urban pelican
#

There are good terms for most these things, we can thank Microsoft for that. Windows has been available in Swedish since forever and thus we've got well established terms for UI.

sly helm
#

Avskalat sounds like it communicates the idea better

urban pelican
#

Sure.

#

Strömlinjeformat is often used as a metaphor for something that is very optimized.

radiant flare
sly helm
#

Hm, interesting, I'll spring for that then. Thanks!

urban pelican
#

It's pretty common you can't do a direct literal translation for a metaphorical term. So it might end up being a completely different term once I start thinking about it.

radiant flare
#

Just downloaded the new update, what do I do with the drizzies folder now? xD

sly helm
#

I rip BBL drizzy tracks off youtube

#

#bbldrizzy #metroboomin #drake #kendricklamar #drakekendricklamarbeef #drakekendricklamar #wedonttrustyou #westilldonttrustyou #future #ASAPRocky #theWeeknd #familymatters #notlikeus #meetthegrahams #bbldrizzybeatgiveaway #duet #duetthisvideo #fyp #foryou #foryoupage #talentedartist #duetthis #viral #atlanta #jamaicanartists #explore #explorepag...

▶ Play video
#

Scru Face Jean BBL Drizzy Freestyle produced by Metro Boomin

#BBLdrizzy #BBLDRIZZYBEATGIVEAWAY

My new Single with Metro Boomin “TOO REAL” https://youtu.be/YBLpRFgO37s?si=BsCq52pec36bhXVu

STREAM "TOO REAL" EVERYWHERE:
https://open.spotify.com/album/13v1ZXfFZwlBhQWgP0u05D?si=KZ9ig69MQaadHhV5NvB1rQ

Get the Underdog App & Win some MONEY: ht...

▶ Play video
#

The module itself has the music/s3/drizzy folder already so you just gotta pick whatever you like !

errant hawk
errant hawk
# sly helm Mesdames l'aimé

Oh! Madame L'Amour! (interjection typically used in Lyon (and more widely in the south-east of France), in the popular, affectionate and slightly ironic register) 🙂

sly helm
#

Ahh, forgive me, I am very clearly not a native speaker

#

Fun fact, I got on VC with Rickoff once, and he was incredibly polite about it, but I think my pronunciation was so awful he asked me not to ever speak french to him

#

I need to practice more 😄

errant hawk
#

😉

radiant flare
sly helm
#

Was a beautiful moment, he's the best

radiant flare
#

Alright, after messing with many mods and whatnot I had trouble with installing and using s3maphore but now I think I'm good.... time to give it a whirl :) I installed the other MUSE ones you recommended last night as well

#

And now that I see there's a dagoth folder I can properly plop in dagothwave for our final battle

sly helm
#

Scipio's sixth house tracks are pretty good tbh

radiant flare
#

Nice I think everything works but I'm having trouble with tamriel rebuilt xD

#

S3maphore is compatible with the TR original soundtrack mod yeah?

#

Or do I just use it alongside s3?

sly helm
#

I'm not sure what exactly the difference is

#

But yeah, it works with the TR soundtrack

radiant flare
#

Hmm

sly helm
#

And the PC one that the author of Morrow Winds did

#

Show openmw.cfg?

#

For TR you need 01 Tamriel Rebuilt Playlists enabled

radiant flare
#

data="E:/Morrowind Mods/mods/s3maphore" data="E:/Morrowind Mods/mods/s3maphore/00 Core" data="E:/Morrowind Mods/mods/s3maphore/01 Tamriel Rebuilt Playlists" data="E:/Morrowind Mods/mods/s3maphore/02 Project Cyrodiil Playlists" data="E:/Morrowind Mods/mods/s3maphore/03 Muse Expansion Playlists" data="E:/Morrowind Mods/mods/s3maphore/04 Vindsvept Solstheim" data="E:/Morrowind Mods/mods/s3maphore/06 Songbook of the North" data="E:/Morrowind Mods/mods/s3maphore/08 Redguard Music" data="E:/Morrowind Mods/mods/s3maphore/09 Nordic Lands" data="E:/Morrowind Mods/mods/s3maphore/10 Inns and Taverns" data="E:/Morrowind Mods/mods/s3maphore/12 BBL Drizzy"

#

I think there was a problem when i installed the TR soundtrack the first time around though so I'm messing with that now

#

Yeah this is strange

#

With s3 the TR OST works in port telvannis but not Almas Thirr or Roa Dyr

#

Not sure what others, those are just the ones I’ve tried

steel gyro
#

Open game settings > scripts > s3maphore and find and enable debug messages or whatever it was called. Return to game, press F10 > look in the console to see what playlist is actually playing (press F8 to skip to the next track and it will mention the playlist). From there, you can mess with the s3maphore playlists, I had to do some rearranging to suit my tastes.

radiant flare
#

Haha I just figured it out, I just had some files paths wrong xD had to check the playlist lua file to get the right ones but we’re good now

sly helm
#

Did I name some of them wrong?

radiant flare
steel gyro
#

`---@type CellMatchPatterns
local DreughCellMatches = {
allowed = {
'paruddma',
'crystal scissure',
'the whispers',
'withering murk',
'wraithspire',
},

disallowed = {},

}

---@type ValidPlaylistCallback
local function dreughCellRule(playback)
return playback.rules.cellNameMatch(DreughCellMatches)
end

local PlaylistPriority = require 'doc.playlistPriority'

---@type S3maphorePlaylist[]
return {
{
-- 'MUSE - Dreugh Cells',
id = 'ms/cell/dreugh',
priority = PlaylistPriority.CellMatch - 150,
randomize = true,
isValidCallback = dreughCellRule,
},
}`

maybe of interest, folder-based playback for TR's new dreugh hive locations, given their vibe it goes well with some really oppressive music or maybe if you're feeling whimsical, a bunch of sea shanties (you'll need a folder MS/cell/dreugh to place the music in, or think of a different folder name to put there). I used a MUSE template, I don't know what the minimum amount of information for a working folder-based playlist is. prio is at cellmatch-150 to override any tile-based shenanigans.

steel gyro
#

`---@type CellMatchPatterns
local KhalaanCellMatches = {
allowed = {
'khalaan',
},

disallowed = {},

}

---@type ValidPlaylistCallback
local function khalaanCellRule(playback)
return playback.rules.cellNameMatch(KhalaanCellMatches)
end

local PlaylistPriority = require 'doc.playlistPriority'

---@type S3maphorePlaylist[]
return {
{
-- 'MUSE - Khalaan Cells',
id = 'ms/cell/khalaan',
priority = PlaylistPriority.CellMatch - 150,
randomize = true,
isValidCallback = khalaanCellRule,
},
}`

there is also an oblivion pocket realm in TR, it's unique and large enough and you spend enough time there as part of questing to warrant a playlist as part of TR imo, it's also a pretty nasty place full of debris, fire, and daedra so choose music accordingly.

radiant flare
#

You’d think the Telvanni would be the ones to send you to oblivion 🤣😭

sly helm
#

What, uh.... what exactly is with the priority, you're trying to overstep any tileset matches?

#

I should really update the existing playlists to use the built-in environment 🤔
I'll do that during this long-ass ride I guess

steel gyro
sly helm
#

I don't have a mournhold tileset, I thought about it but m I'm not ultimately sure what tilesets are most useful to have

#

Unfortunately since I've modularized my configurations it's a lot harder to do that than it used to be with delta plugin, can't read nested configs

steel gyro
#

it's pretty good for dwemer, daedric, various PC and SHOTN ruins, I guess "locations with a bunch of wildly different names but similar layout", I think you got most of them (haven't really been to PC or SHOTN yet though). Maybe a special egg mine list lol.

sly helm
#

Yo a kwama faction playlist sounds cool actually

#

PC is probably the worst configured one right now. There are so few of those tracks but they're really neat but also aren't folder based so they can use athmospheres as filler

#

Maybe I can fix that by having people add the athmospheres everywhere module 🤔

steel gyro
#

yeah I looked at it, it's definitely not enough tracks, not enough filler in the world to fix that. I ripped out most of the TR playlist guts and replaced it with region folders, think I'll do the same for PC.

maybe get strongholds a tilebased list too if it doesn't have one, not actually sure what is playing in there now (seems to be generic explore fallback)

sly helm
#

Almost certainly.

#

That was one that came to mind, as well

steel gyro
#

other random idea, immersive travel. A strider travel playlist and a boat travel playlist. Finally, legit sea shanty time. I don't suppose s3maphore can detect when stuck on a ship or strider, so I guess immersive travel needs to have a "play/stop this playlist" clause added somewhere in the travel sequence much like what happened with bardcraft, correct?

sly helm
#

The rulesets are built in such a way that you can make pretty much anything a rule

#

Preferably if there's a function in immersive travel's i terface that can say whether you're traveling or not

#

Then you could make playlists for it and hook into the other rules like time of day or whatever

steel gyro
#

https://pastebin.com/rKHaGFLs - basic tileset test for strongholds, seems to work ok and gets overridden by sixth house playlist when in one of their strongholds (this is good)

inner crypt
#

@sly helm modders who checking error logs like me get their attention caught by this line each time:

sly helm
#

I'd thought that was fixed already, but I guess it must be throwing when constructing the initial PlaylistState instead of the onFrame. I'll deal with it

steel gyro
#

`---@type CellMatchPatterns
local Narsis_CatacombsCellMatches = {
allowed = {
'narsis, catacombs',
},

disallowed = {},

}

---@type ValidPlaylistCallback
local function narsis_catacombsCellRule(playback)
return playback.rules.cellNameMatch(Narsis_CatacombsCellMatches)
end

local PlaylistPriority = require 'doc.playlistPriority'

---@type S3maphorePlaylist[]
return {
{
-- 'Narsis_Catacombs',
id = 'ms/cell/narsis_catacombs',
priority = PlaylistPriority.CellMatch - 150,
randomize = true,
isValidCallback = narsis_catacombsCellRule,
},
}`

playlist for Narsis Catacombs which I suppose play cave music normally. This is generally fine but it's a huge place, you'll likely get lost there for a while, and I felt it deserved its own tunes. It's not too many cells, you could build an exact cellmatch list but eh.

radiant flare
steel gyro
#

standalone for me but you could add it to TR playlist

radiant flare
#

Word, thank you!!

jagged badger
#

What is the .gitkeep file for?

fallow bough
steel gyro
#

I made a playlist for Sotha Sil Expanded but I couldn't figure out why it wouldn't play. Turns out the mod itself has mwscript dictating the tracks. I like the mod's music but it's only a couple of tracks, not enough for the amount of time you spend there solving trainwiz's infernal puzzles. I ended up nuking the scripts for it, this works aside from a little complaining in the log, but it's not very elegant. Is there a better way using s3maphore?

`---@type IDPresenceMap
local SothaEnemyNames = {
['hulking fabricant'] = true,
['verminous fabricant'] = true,
['imperfect'] = true,
}

---@type ValidPlaylistCallback
local function sothaEnemyRule(playback)
return playback.rules.combatTargetExact(SothaEnemyNames)
end

---@type CellMatchPatterns
local SothaCellMatches = {
allowed = {
'sotha sil',
},
disallowed = {},
}

---@type ValidPlaylistCallback
local function sothaCellRule(playback)
return playback.rules.cellNameMatch(SothaCellMatches)
end

local PlaylistPriority = require 'doc.playlistPriority'

---@type S3maphorePlaylist[]
return {
{
-- 'MUSE - Sotha Cells',
id = 'ms/cell/sothasil',
priority = PlaylistPriority.CellMatch - 150,
randomize = true,

    isValidCallback = sothaCellRule,
},
{
    -- 'MUSE - Sotha Enemies',
    id = 'ms/combat/sothasil',
    priority = PlaylistPriority.BattleMod,
    randomize = true,

    isValidCallback = sothaEnemyRule,
},

}`

sly helm
sly helm
#

Basically you're going to lose to mwscripted music playback err time. I could try forcing the track if it didn't match the current one, but that's a bit aggressive.

#

The only real option I see is to reach into the script and set the timer to 0 in every frame

static orchid
#

Is there a general dungeon playlist? Don't really need them separated by type

sly helm
#

The necessary folders are premade in here under music/s3, so you should be able to just add this in the Data Directories tab of the launcher, and smack whatever in there

#

This includes in and out of comobat

frigid smelt
#

hey is there a repository for playlists somewhere?

sly helm
#

Most of the stuff posted in this channel in this last week or so, both has not made it into the repo and I would like to add later

#

check pins for web version of the docs

frigid smelt
#

cool thanks

#

what's the difference between a cave and a dungeon?

#

or is a cave a specific type of dungeon?

#

I'm basically just trying to include Oblivion and Skyrim OSTs in OpenMW, deciding whether certain tracks should go in MUSE's interiors or in your mod's General Dungeon folder

#

like if an interior isn't specified in muse folder would it default to your dungeon folder?

sly helm
#

wwweeellll

#

so it's a bit of a cheat, really

#

The way a dungeon is defined is that it is an interior with living hostiles in it

#

caves are that + the cell has to have some specific statics placed inside of it from the cave tileset

#

The other playlists which are associated with specific types of dungeons generally do that as well, but it depends on how common a certain dungeon/tileset is

#

It's set up this way partially because that bit of the system isn't entirely complete and also because I think skyrim is supposed to have different playlists roll after a dungeon is cleared

#

For things like the end-of-dungeon loot sting/entrance track you can use the builtin events for cell/track change to intercept any song change you want

frigid smelt
#

that's awesome that you can do that but I'll just stick to the premade folders cause I'm a total noob at this haha

#

just trying to match stuff up like this that's good enough for me

#

I'm also a total noob at Morrowind and have no idea what the different dungeon tilesets are

#

I guess I'm asking if I have all the muse expansion folders, are there still unaddressed tilesets that would use the general dungeon playlist?

frigid smelt
#

and this is kinda out there, any chance .flac works? lol

sly helm
#

Yea totally basically all audio/video formats work in openmw

#

Whatever ffmpeg supports, you can look it up

#

I thought about it for a bit and I'm not honestly sure if the muse dungeons cover everything or not. I don't think so.

frigid smelt
#

thanks for your truly awesome mod, I wish every game had something like this

sly helm
#

Hey thanks, I really appreciate it. This mod was easily my favorite to work on, of everything I’ve done. Sometimes I open the game up just to listen to the music 😄

hearty depot
#

Yeah it's a great mod, it Just Works todd and has been really easy for me to make my little custom playlists! Having spooky atmospheric music for dungeons and caves really elevates the experience.

radiant flare
#

That happened to me one playthrough and I had to step away because I was laughing so hard

steel gyro
#

traveling in PC lands now, the cyrodiil playlist works fine (as long as you populate the folders it points to of course), it's missing entries for the statics used in first era ruins like Eumaeus, I added the following to the end of local CryptStatics = {
https://pastebin.com/2HGJxqgb
which is probably overkill but it works (and not as overkill as the ayleid section which I think hits every single ayleid static). Considered adding a separate entry but I only have so much tomb/ruin/dungeon music.

steel gyro
#

and it might be intentional but PC has large wilderness/water areas marked "abecean sea region" which fall back to generic explore music, but I wanted specific music
` {
-- 'Project Cyrodiil - Abecean seas',
id = 'ms/region/cyrodiil abecean sea region',
priority = PlaylistPriority.Region,
randomize = true,

    isValidCallback = function(playback)
    return playback.state.self.cell.region == 'abecean sea region'
    end,
},`

(it's just DKC 1994 underwater music on endless loop)
https://www.youtube.com/watch?v=-5rAjOjTGtc

weak yacht
#

hello s3xxor, after messing up my interior lights and stuffs, i am ready and willing to finally reach pleasant results regarding musick playing, as i did with lights and stuffs, after messing everything up. very much thanks for your works, i like you works very much, thank you. (felt the urge to say thank you, couldnt come up with something more eloquent, sorry)

sly helm
#

What an excellent nickname, I think I'll appropriate that, and thank you, as well! I'm glad you enjoy it 💜

cold lake
#

is it possible to not let it play music from a folder inside a folder? for example, my ID is id = 'ms/cell/hlaalu', inside a hlaalu folder there is 'night' folder and currently it plays tracks from both hlaalu and hlaalu/night folder

sly helm
#

Nope. The vfs bindings I use give all paths matching a prefix, so, ms/cell/hlaalu matches for ms/cell/hlaalu/night also. You'd have to do something night-hlaalu

#

MUSE packs aren't meant to be used this way so you might be best off just abandoning the MUSE convention and making up your own.

cold lake
#

thank you. I have one more question, I'm trying to write a playlist rule for night time music, this is a modified hlaalu muse playlist
local function hlaaluNCellRule(playback) return not playback.state.isInCombat and playback.rules.timeOfDay(18, 6) and ( playback.rules.cellNameExact(HlaaluCatacombNames) or playback.rules.cellNameMatch(HlaaluCellNames) ) end

but with that new line added the playlist doesn't play at any time, what's wrong? I only have this one playlist for testing, only vanilla explore tracks are playing. I can see that it registered the playlist in the lua log

sly helm
#

I guess I should rearrange that rule though. I see what you're going for here.

#

You could instead do Playback.state.timeOfDay == 'night'

sly helm
#

The current rule straight up won't work the way you're trying to use it unfortunately, but it definitely should.

cold lake
#

I think the formula in playlistrules.lua might be wrong
local gameHour = math.floor(core.getGameTime() / 3600) gives me 930 on my current game, so when my min and max hours are 1 and 950 for example the playlist finally kicks in
this fixed that
local gameHour = math.floor(core.getGameTime() / 3600) % 24

sly helm
#

It is wrong.

#

But also, when you pass 18 as the min and 6 as the max, it's going to check that, say, 19 >= 18 and 19 < 6, which will never happen.

cold lake
#

so it would have to be something like and not playback.rules.timeOfDay(6, 18)

#

yeah this and the formula fix does it for me

#

is it better to define the hour arguments as local variables or it doesnt matter?

sly helm
#

Nah they don't have to be locals unless that's just easier for you to keep track of.

jagged badger
sly helm
#

time of day rules are slightly broken 😅

#

As it turns out, some tests require actually playing the game... Who'd have thought?

#

They work just fine on the first day. todd

#

Will have fixed build up this weekend

cold lake
#

here's a simple playlist example. you have a separate night rule, and remember that right now the formula doesn't wrap around midnight (you can't go 18, 6), in this example it will play when it's not the hours between 6 and 17. then below you want to make sure that the priority for the night playlist is lower than your day playlist

cold lake
#

if you want want to expand on it, have night music for different regions and cities, you need to get your priorities straight. this is a basic priority structure that I follow
explore > regions > explore night > regions night > cities > cities night > cells > cells night
regions that dont have specific music will have overworld explore day and night playlists. a cell like Southwall Cornerclub will have cell night music, but Caius house will have city night music

sly helm
#

In a lot of cases, the best way to handle priorities is to just reuse them.

#

Then, if they conflict, bump one of them further down.

#

For example, all the city playlists are the same priority, because you can't be in two places at once, right?

#

I DID add a special priority class for timeOfDay but I'm not sure how necessary it really is.

jagged badger
#

cool thanks for the explanaitions. im slowly getting my head around this new languge, its super fun

sly helm
#

Glad you're enjoying it 🙂
And please, lmk if you come up with new rule ideas (you don't actually have to use mine either)

#

I have a few listed in the Nexus comments lol

jagged badger
#

yeah major kudos for making it as approachable as it is👍 ill check the comments too. just thinkn though id love a way to have more combat music options, theres some for specific bosses but a some kind of "threat level" tracking would be cool. or maybe creature type, i have a few random folders labelled "animal" or "bandit" (i think from merging soule sounds into the folder structure) that dont do anything now but its an interesting idea.

#

also im checking out children of morrwind and its pretty funny when they have play fights and the epic combat music starts

#

though not as funny as it was before i updated my Protective Guards blacklist 😂

sly helm
#

Muse had a level difference rule I think would help a lot.

jagged badger
sly helm
#

oh dear god.

#

well, wait, the children are in combat with you?

jagged badger
#

i missed the subtitle where he said "hah! you fight like a child!"

#

no they were having a play fight and the guards just descended on them

#

i may have gotten a few digs in in the tussle

sly helm
#

slightly easier than expected. Look for some noice upgrades soon....

inner crypt
#

Please BTW remove the error on game loading

sly helm
#

Yeah that's been done, it's meaningless anyway

#

When it fails to index the cell on the first frame it's corrected by the third before any playlists are selected

#

That particular error was one of a handful of fixes I just kinda sat on for a bit until I got the motivation to do something more interesting. Sorry lol 😅

inner crypt
#

No pb 🙂

sly helm
#

If anybody has any, I'd love some thoughts on how to deal wit silence between tracks. Not in code terms, just how the playlists should be structured.
Presently I've got this:


        silenceParams = {
            betweenTracks = 30,
            betweenPlaylists = 5,
            chance = 0.15,
            -- betweenTracks = { max = 30 },
            -- betweenPlaylists = { max = 0 },
        },

betweenPlaylist kind of sucks though, and also isn't exactly easy to implement the way things are structured. Doable, but ugly.
I'd like for the betweenTracks param to behave like journal rules do, so you can define either a minimum/maximum silence duration, or both, and then add a chance for silence.

I momentarily considered instead making it play a specified number of tracks prior to doing the silence, but idk, feels like just having a chance to not play anything for a bit seems best.

Here's a test build and the hlaalu playlist I've been messing with if anybody wants to try out the new playlist stuff

jagged badger
#

There's currently no way to disable music, is there?

sly helm
#

There are many

jagged badger
#

I mean, on the fly. Like to turn it on/off in game

#

No.. my words aren't good sorry

sly helm
#

I get what you're asking

#

Just depends on context

#

As a player or another mod maker?

#
-- via Interface
I.S3maphore.toggleMusicEnabled(false)
-- via events
player:sendEvent("S3maphoreToggleMusicEnabled", false)

Also there's a setting

jagged badger
#

Yes, context is good 😅 I was just thinking about having more control of my playlists while playing, like to silence with a hotkey or switch to a custom playlist

sly helm
#

The way it's structured might never support custom playlists, I'll have to think about that

#

I could add a button for it though, maybe hold shift when you hit the skip track button

jagged badger
#

interesting yeah that could be cool, the thing that got me thinking was recording some clips to make little dynamic scenes to send to my friend and I was curious what's possible

#

Possible vs plausible

sly helm
#

Yea it's pretty easy to terminate playback

#

I put the methods in there and stuff but really I never expected players to be using them for any reason, I even thought about that

#

Easiest thing ATM is just disable playback completely in settings but both of the above commands will work in console

jagged badger
#

Ok cool thanks, all good. Really not a pressing concern, just a niche curiosity

sly helm
#

Hey pal, wanna help me update my translations for 0.55?


GlobalSilenceToggle: Enable Silence Tracks
GlobalSilenceToggleDesc: Whether or not there may be a period of silence between each song played.

GlobalSilenceChance: Global Silence Chance
GlobalSilenceChanceDesc: The chance that a playlist which does not define its own silence rules may not immediately play another song.

ExploreSilenceMin: Minimum Explore Silence Duration
ExploreSilenceMinDesc: The minimum possible duration for silence when an explore playlist is running.

ExploreSilenceMax: Maximum Explore Silence Duration
ExploreSilenceMaxDesc: The maxiumum possible duration for silence when an explore playlist is running.

BattleSilenceMin: Minimum Battle Silence Duration
BattleSilenceMinDesc: The minimum possible duration for silence when a battle playlist is running.

BattleSilenceMax: Maximum Battle Silence Duration
BattleSilenceMaxDesc: The maxiumum possible duration for silence when a battle playlist is running.

@urban pelican

urban pelican
#

MR or just throw the lines here?

sly helm
#

Just drop it here, unless you care about owning the commits

clear spear
#

I'm having a very minor issue and idk if it's even an issue or not but I'm using the built in support measures of S3maphore with the project cyrodiil music and the chapel music just isn't playing. It looks like the anvil music is overwriting it in priority and idk how to fix it.

#

Thought I might ask here since it's the S3maphore thread, if that's not welcome please let me know and I'll shoot for a more appropriate channel

#

I don't want to be a prick >~<

sly helm
#

Relax 🙂

#

Literally just whatever priority is already there and do -1.

#

Actually, since this is a bug, just... Gimme like five minutes.

clear spear
#

I have never coded with lua before so, I am blundering around in the dark here

sly helm
#

Yeah, that's exactly what I was thinking of.

#

I can't check rn, am at work, what Prio is the Anvil playlist at?

clear spear
#

It's the same, I think. priority = PlaylistPriority.CellMatch

sly helm
#

The change you made to the priority should be good then.

#

Maybe the matches are screwed up.

clear spear
#

Lemme see what happens if I add chapel and temple to the disallow list for anvil music

#

Odd, nothing

#

Anvil looks like this

local AnvilPatterns = {
    allowed = {
        "anvil",
        "marav",
        "hal sadek",
        "archad",
        "brina cross",
        "goldstone",
        "charach"
    },

    disallowed = {
        'sewer',
        'underworks',
        'crypt',
    },
}```

And Temples looks like this
```---@type CellMatchPatterns
local TemplePatterns = {
    allowed = {
        "anvil, chapel",
        "anvil, temple",
        "brina cross, chapel",
        "charach, chapel",
        "fort heath, chapel",
        "goldstone, chapel",
        "thresvy, chapel"
    },

    disallowed = {},
}```
#

Idk what fixed it, but something fixed it

#

Thanks for the help

sly helm
#

Huh. Okay lmao.

#

I'll double check the priorities are good!

#

I've only been playing in Anvil so nbd to check it out on my side 💜

clear spear
#

By the way how would I hypothetically go about putting together a playlist of music that will only play at night in-game

ripe maple
#

A request @sly helm. Not sure if possible but I would love if there was a longer fade option going from battle to exploration

#

especialy since I prefer normal exploration music off the the battle music cuts very abruptly

sly helm
#

There's an option for the fadeOut.

#

Although ....

#

I think the currently published version just straight up uses it incorrectly

#

Try changing that setting and please lmk if it works.

#

I remember someone told me it was implemented wrong (it totally was), you can scroll up far enough and see it.

sly helm
# clear spear By the way how would I hypothetically go about putting together a playlist of mu...

Super easy! Sorry I didn't reply last night. Actually I guess I have some improvements to make here...

Anyhow, there are two options.

local function tombCellRule()
    return not Playback.rules.cellNameExact(TombCellExclusions)
        and Playback.rules.cellNameMatch(TombCellMatches)
        and Playback.state.playlistTimeOfDay == 'night'
end

Playback.state.playlistTimeOfDay, will be morning, afternoon, evening, or night, each covering six hours of the day. So ^ works if you don't wanna be SUPER specific about it.
If you wanna be more detailed you can do this:

local timeRules = { min = 8, max = 12 }
local function tombCellRule()
    return not Playback.rules.cellNameExact(TombCellExclusions)
        and Playback.rules.cellNameMatch(TombCellMatches)
        and Playback.rules.timeOfDay(timeRules)
end

This way allows you to set specific times of day.

clear spear
#

I'll probably do night, and probably also want to lock region priority at some point since I want it to play on Vvardenfell and TR but not anywhere else

#

Thanks

#

As I've said I've never coded in Lua before. I'm a C# person >~<

sly helm
#

Oh, okay, that's cool! I like C# a lot, depending on the day

#

Imagine if you could write C# whilst drunk and you get the basic idea

#

Not many rules, typing is entirely your problem

clear spear
#

I mostly learned it in school to do visual studio work with Unity

#

I'll probably look into certification so I might maybe one day get a job lol

sly helm
#

Me too!
Those were the days I didn't like C#. todd

clear spear
#

C# isn't that bad to me, just gets annoying when I try to use some advanced function protocol I learned yesterday on a stack overflow thread for dialogue queueing and the next two days are just me debugging

sly helm
#

The unity impl runs like shit and I don't really like their API/Docs

clear spear
#

When the whole time I could have just done twine integration =~=

sly helm
#

DIvorced from Unity, the language shines

#

Although I learned to strongly prefer rust in the end

clear spear
sly helm
#

Oh yeah.

#

I'd absolutely encourage learning godot, the ecosystem behind it is growing rapidly after The Incident

#

(also another reason I won't be going back to Unity, personally)

clear spear
#

No weirdly enough the language so far I dislike the most was actually python

#

Idk why but the freeform syntax was mind bogglingly frustrating for me lol

sly helm
#

Aaaaahhhhh, that's a good sign 😄

clear spear
#

What autism does to a mf

sly helm
#

Yea significant whitespace is super cringe garbage

#

The ONE thing I do think is really cool about Python is comprehensions, but it's not even close to being worth the cost of not realistically being able to ship Python apps to users, and everything constantly being broken because "it's easy!"

#

What people really mean when they say "it's easy" is, I didn't have to verify anything actually works properly

#

fight me irl python devs

clear spear
#

Lol

sly helm
#

python devs wouldn't even make it to the fight debugging stack traces

#

ANYWAY I'm hopping in to test that chapel issue, do you have a specific cell name I can check out?

sly helm
# clear spear Lol

okay yeah bumping the priority down on the Anvil playlist by one confirmed fix 👌

clear spear
#

Nice

clear spear
#

Since my PC save was outside the fighters guild

sly helm
#

also where I'm testing

clear spear
#

No honestly I think the -1 may have fixed it??? It's just that S3maphore waits until the current track is over before switching for me, so I had to actually quicksave/quickload to hear

sly helm
#

yea that's the default setting

clear spear
#

I'm fine with it, just feel a bit dumb lol

sly helm
#

I didn't wanna do it that way originally but everyone and their mom and dog asked for it, haha

#

You can disable it in the settings menu if you want

clear spear
#

I still like how dungeon music comes in immediately

sly helm
#

also configurable, but kinda skeptical that specific one needed to be a setting

clear spear
#

Love the open endedness of the playlists though since I can just use the framework for the Project Cyrodiil music mod with S3maphore and then drag in Oblivion music from my install

sly helm
#

Yeah actually I've been meaning to set up some proper oblivion playlists for it

#

Like using the dungeon rules and stuff

#

What I reeeaaaallllyyyy want, is to make some Lorkhan playlists

clear spear
#

Only had different music for the Aylied Ruins (They Left me in here, and Diaspora Nenalata) and Chapels (Nox Atra) from BS Bruma

clear spear
# sly helm Super easy! Sorry I didn't reply last night. Actually I guess I have some improv...

No idea if I already borked this


local function tombCellRule()
    return not Playback.rules.cellNameExact(TombCellExclusions)
        and Playback.rules.cellNameMatch(TombCellMatches)
        and Playback.state.playlistTimeOfDay == 'night'
end

---@type S3maphorePlaylist[]
return {
    {
        -- 'Skywind Nighttime Music',
        id = 'ms/time/morrowind night',
        priority = PlaylistPriority.Tileset,
        randomize = true,

        isValidCallback = function(tombCellRule)
            return not Playback.rules.cellNameExact(TombCellExclusions)
            and Playback.rules.cellNameMatch(TombCellMatches)
            and Playback.state.playlistTimeOfDay == 'night'
        end
    }```
sly helm
clear spear
#

I see

sly helm
#

That's because of this

#

So when every playlist is loaded, this curated environment is fed into it

#

You can even use the print function here to debug your playlist, and the messages will only be emitted if you have the debugMessages setting enabled

clear spear
sly helm
#

No the playlist timeOfDay thing is just kinda jank.

#

12-6 am is morning.

#

6pm-12am is night.

clear spear
#

Oh ok

sly helm
#

It's broken up into chunks of six

clear spear
#

Lemme just do manual then

west sundialBOT
#

yeah, before you even have timeofday rules Sector needs to update the function, you can do a simple patch in the meantime. go to S3maphore\scripts\s3\music, open playlistRules.lua and find this line
math.floor(core.getGameTime() / 3600)
add % 24 to it like I wrote above.

sly helm
#

Check out the playlist file sandcastles posted

#

And test it on a new game, eg using --skip-menu --start "some cell name"

#

I already fixed this like immediately but the new version including said patch isn't yet published

#

I can send it to you if you want

clear spear
#

In dms I'd appreciate it

#

Will the patch only work on new games?

sly helm
#

Dwamn

#

Oh no you don't have to start a new game for the next update to work

#

It's just that when I first made that rule I only was testing in new games, and I didn't notice my math doesn't work after the first day of gameplay. 😅

#

So like, it's supposed to calculate the hour of the day, between 0-24, and instead after a long time of play you'll get it up to 9000 or whatever

clear spear
#

Ok so it's still not working, do I need to install the patch and do manual time of day?

clear spear
sly helm
clear spear
#

Because I am pretty sure if i do min = 4, max = 20 It will be the opposite

sly helm
#

It will, BUT

#

Just change it to not Playback.rules.timeOfDay(whateverRange)

#

That's what sandcastles was talking about

clear spear
#

Ok testing now

#

Still no luck

#

Lemme dump the current lua

#
local function tombCellRule()
    return not Playback.rules.cellNameExact(TombCellExclusions)
        and Playback.rules.cellNameMatch(TombCellMatches)
        and not Playback.rules.timeOfDay(timeRules)
end

---@type S3maphorePlaylist[]
return {
    {
        -- 'Skywind Nighttime Music',
        id = 'ms/time/morrowind night',
        priority = PlaylistPriority.Tileset-1,
        randomize = true,

        isValidCallback = function(tombCellRule)
            return not Playback.rules.cellNameExact(TombCellExclusions)
            and Playback.rules.cellNameMatch(TombCellMatches)
            and not Playback.rules.timeOfDay(timeRules)
        end
    }```
#

Wait I think I see what's wrong

#

No, lemme edit to what I changed though

#

Hmm wait a sec

#

What should I invoke for playlist priority

#

Since it's set to tileset right now that doesn't seem right

sly helm
#

I forget the exact name, but CellMatch is likely most appropriate here

#

There's also an explicit time of day priority that supersedes most of the others you might orefer

#

Tileset is meant for instances where you're using one of the static rules, eg for daedric objects or whatever

clear spear
#

If I do CellMatch without specifying any cells that's fine, right?

sly helm
#

I'm not sure what you mean, sorry. It looks like your playlist still uses the CellMatch rule

#

But in any case, you can set any priority level you like

#

The only thing you shouldn't do is use an explicit number, like 1000 on an explore playlist

#

Because the actual numbers behind those enums may change at some point, if I need to

#

It's just a classification thing to allow them to layer better

clear spear
#

I think my syntax is just bad because my Ashlands playlist isn't working either

sly helm
#

The F10 log should indicate whether it threw trying to load the playlist or not, and also you can tell if it loaded at all if you look in the settings menu and try to find it.

#

Post the file?

clear spear
#

I'll post both

sly helm
#

It looks like you might be missing a second close brace }

clear spear
sly helm
#

ah, yes, ashlands is missing a close } at the end

#

I see what you meant about not having any cell names now

#

your log is probably full of errors from the nighttime one

#

oh, they're both missing close }

#

If you use vscode, and add the 00 Core folder to your workspace, you can get completions for all the rules and everything

clear spear
#

Honestly this is a sin but I was using Notepad lmao

sly helm
clear spear
#

If Visual Studio works with lua I will use that

sly helm
#

Idunno about Visual Studio, VSCode definitely does

clear spear
#

Oh those are two different things?

sly helm
#

yes

#

You're most likely using Visual Studio Code

#

Please don't ask me why microsoft adopted this stupid naming convention or why they even have two editors

#

VS is mostly for hardcode C++ dev, VSCode is the one everyone else uses

clear spear
#

I'll test the modified lua's you made first, and thank you

sly helm
#

yea, of course!

clear spear
#

I was using VS actually, because Unity workflows yada yada

sly helm
#

huh. It's been a while but I thought all the unity extensions were for VSCode

#

I'm not really even sure if they're different extension systems or not

clear spear
#

But yeah I was probably overlooking the end brackets since, again, I was notepad coding like a moron

sly helm
#

That's what all the ---@type stuff in the mod is for, they're not functional at all, it's just error checking

#

I seem to have done it so aggressively most people who don't know better think it is though which I consider a success scarytodd :

clear spear
#

For me at least it was lol

clear spear
#

Also probably why music just doesn't play now at night

clear spear
#

Got it working

#

Thank you for the vscode

sly helm
#

My pleasure!

#

And if you come up with any weird rules you wanna add, lmk

clear spear
#

Prioritizing red mountain region music over combat music

#

Is the main one rn to me

#

So if I am like fighting hordes of corprus beasts and cliff racers I still hear whatever music I'm using for red mountain

cold lake
#

hello
I tried a test build with the silence feature
much needed feature, a cherry on top that completes the mod for me, as I don't need to have dozens of silent mp3s in every folder anymore
in skyrim of course you have to specify the silent track manually, track by track and by duration
but I think you have an elegant and simple implementation, make a minimum and maximum duration of silence, have it choose randomly between the two, and chance of a silence track of course
I feel like you can ditch the silence between playlists and have it only between tracks
in the build you posted, skipping a track with F8 would never play silence. and when it plays, it spams the console the countdown on every frame

sly helm
urban pelican
# sly helm Just drop it here, unless you care about owning the commits

Damn, totally forgot. Sorry. Here goes:

GlobalSilenceToggle: Aktivera tysta spår
GlobalSilenceToggleDesc: Om det ska förekomma en paus mellan varje låt som spelas eller inte.

GlobalSilenceChance: Chans för global tystnad
GlobalSilenceChanceDesc: Chansen för att en spellista som inte definierar sina egna tystnadsregler inte omedelbart spelar upp en annan låt.

ExploreSilenceMin: Kortaste tystnad under utforska
ExploreSilenceMinDesc: Minsta möjliga varaktighet med tystnad när en utforska-spellista körs.

ExploreSilenceMax: Längsta tystnad under utforska
ExploreSilenceMaxDesc: Längsta möjliga varaktighet med tystnad när en utforska-spellista körs.

BattleSilenceMin: Kortaste tystnad under strid
BattleSilenceMinDesc: Minsta möjliga varaktighet med tystnad när en strid-spellista körs.

BattleSilenceMax: Längsta tystnad under strid
BattleSilenceMaxDesc: Längsta möjliga varaktighet med tystnad när en strid-spellista körs.
urban pelican
sly helm
sly helm
#

You could also just not do the + 1 but Special playlists don’t follow the same rules as others. Which may be exactly what you want

jagged badger
#

Could you use special for example to play a certain song when the game starts in the ship? Or what about the first time you enter a cell/area?

sly helm
#

Yep.

#

It's the ideal playlist for any one-off thing you can make up, I have plans to use it for both of those things

jagged badger
#

Neat!

grave garden
#

Can this mod detect weather? Putting in the Daggerfall weather tracks in correct occasions when outdoors would be sick.

sly helm
#

yep.

sly helm
#

I'm not sure if this particular rule ever made it into the docs but I did an awkward mwscript bridge setup that tracks weather

#

Which, come to think, I guess I don't need now...

grave garden
#

What would be the correct form to use in a playlist? Or is the answer "wait for now because I'm about to change the format and the new system will be clearner?"

vital viper
#

S3ctor really just be pulling the dopest shit out of his ass at random

sly helm
#

I’m adding some new fields in the next version, but the format isn’t changing enough that you should bother to wait on me for anything.

grave garden
sly helm
#

not remotely, no

grave garden
#

But how would I replace the condition with weather, so that during a blizzard, say, it adds G_Snow to the rotation?

grave garden
# sly helm not remotely, no

Hah, fair, the lists S3maphore ships with are close enough I can read it from Dynamic Music lists.

Again, regarding Cell names.

sly helm
#

---@type CellMatchPatterns
local ImperialPatterns = {
    disallowed = {
        "sewer",
        "dungeon",
        "fields",
    },
    allowed = {
        'firewatch',
        'helnim',
        'old ebonheart',
        'teyn',
    },
}

return {
    -- way more stuff
    {
        id = 'Tamriel Rebuilt - Imperial',
        priority = PlaylistPriority.CellMatch,
        randomize = true,

        tracks = {
            'Music/MS/general/TRairdepths/Dreamy athmospheres 1.mp3',
            'Music/MS/general/TRairdepths/Dreamy athmospheres 2.mp3',
            'Music/MS/cell/ImperialCity/Beacon of Cyrodiil.mp3',
        },

        isValidCallback = function()
            return Playback.rules.cellNameMatch(ImperialPatterns)
        end,
    },
    -- more stuff
}

So like here's your imperial playlist right

#
    {
        id = 'Tamriel Rebuilt - Imperial - Snow',
        priority = PlaylistPriority.CellMatch - 1,
        randomize = true,

        tracks = {
            'Music/MS/general/TRairdepths/Dreamy athmospheres 1.mp3',
            'Music/MS/general/TRairdepths/Dreamy athmospheres 2.mp3',
            'Music/MS/cell/ImperialCity/Beacon of Cyrodiil.mp3',
        },

        isValidCallback = function()
            return Playback.rules.cellNameMatch(ImperialPatterns) and Playback.state.weather == 'blizzard'
        end,
    },

You make another playlist that checks the weather in its isValidCallback

#

This makes me suddenly realize I need a new priority level for weather, probably.

#

making it a lower priority than whatever the normal playlist is, is critical

#

OR iif you literally just write the weather-based playlist after it in the file, since registration order will be later also

#

these are the weathers, copied 1:1 from the actual names the game uses:


---@enum WeatherType
local WeatherType = {
    [0] = 'clear',
    [1] = 'cloudy',
    [2] = 'foggy',
    [3] = 'overcast',
    [4] = 'rain',
    [5] = 'thunder',
    [6] = 'ash',
    [7] = 'blight',
    [8] = 'snow',
    [9] = 'blizzard',
}
#

weather was kinda half-assed, I guess.

#

it also sends events when the weather changes so you could just leverage that to play a special track, but that's more script-intensive than just a normal playlist

#

in the sense of being more to actually write yourself, I mean.