[SUG][PLAYER] Two suggestions for selecting level music

Started by Proxima, April 08, 2020, 07:30:16 PM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

Proxima

A minor issue: loose levels (ones in the main levels folder and not any subfolder) are treated as a rank -- the first one gets track 1 in the rotation, the second gets track 2, and so forth. This is okay but personally I'd prefer it if loose levels got a randomly chosen track.

Much more importantly, I would like to be able to give levels an ordered selection of tracks, so for instance "MUSIC smstitle; orig_01" would play smstitle if the user has that track in their music folder, and orig_01 otherwise.

Use cases for this: firstly, I'd like to be able to refer to tracks from other packs, while also having a fallback for users who don't have a particular pack installed. WillLem has said he's happy for other users to use his Lemminas music, but at the moment, if I set a level to a Lemminas track and a user doesn't have it, it will fall back to the default rotation, which isn't what I want.

Secondly, when I release GemLems and its music pack, I'd like my levels to have a fallback option for users who choose not to install the GemLems music. I know this has been a touchy subject in the past, but the fact remains: music packs take up so much disc space and download time that some users won't bother with them at all, or will be selective about which ones they install.

DireKrow

I would definitely make use of music fallbacks if/when I made a pack. So count me interested in that.
LOTY 2020 Winner
My NeoLemmix Levels: The Krow Files (File A v1.2 released 21-Feb-2020)

namida

QuoteSecondly, when I release GemLems and its music pack, I'd like my levels to have a fallback option for users who choose not to install the GemLems music. I know this has been a touchy subject in the past, but the fact remains: music packs take up so much disc space and download time that some users won't bother with them at all, or will be selective about which ones they install.

My concern around this is NeoLemmix actively facilitating people doing something the developer didn't intend (ie: using without music). I have no issue with allowing the pack's developer to present it as an option and specifying a fallback; so I'm fine with this idea.

Both these changes sound like good ideas, although at this stage they'll be candidates for 12.10, not 12.9.
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

WillLem

Quote from: namida on April 08, 2020, 07:46:44 PM
My concern around this is NeoLemmix actively facilitating people doing something the developer didn't intend (ie: using without music). I have no issue with allowing the pack's developer to present it as an option and specifying a fallback; so I'm fine with this idea.

Conversely, what are people's thoughts on a level developer not allowing a pack to be playable without its music, in the same way that the levels won't load if the styleset hasn't been installed?

EDIT: i.e. if the developer doesn't specify music, or specifies optional music, then the levels will load with default/secondary music rotation. However, if the developer specifies primary-only, then the levels will require installation of their primary music tracks in order to load.

I'd be fully in favour of this btw, but probably more so in the event of an easy-pack-downloader being implemented.

Proxima

Quote from: WillLem on April 09, 2020, 12:02:02 AMConversely, what are people's thoughts on a level developer not allowing a pack to be playable without its music, in the same way that the levels won't load if the styleset hasn't been installed?

Firstly, you can't enforce the user hearing the music, because they always have the option of muting it. That might not be out of malice: the user might be playing in a hotel lobby or other public space, or in a house with a housemate they don't want to disturb (especially during the current lockdown, but for some people this will always be a problem).

Secondly, music packs tend to run to hundreds of MBs, and there are already dozens of level packs and the number is only going to grow. It would be completely unacceptable for NL to squat on that much disc space when it doesn't need it.

Finally, this would achieve nothing anyway, because the user can simply edit the levels to remove any restriction imposed.

namida

Quote from: WillLem on April 09, 2020, 12:02:02 AM
Quote from: namida on April 08, 2020, 07:46:44 PM
My concern around this is NeoLemmix actively facilitating people doing something the developer didn't intend (ie: using without music). I have no issue with allowing the pack's developer to present it as an option and specifying a fallback; so I'm fine with this idea.

Conversely, what are people's thoughts on a level developer not allowing a pack to be playable without its music, in the same way that the levels won't load if the styleset hasn't been installed?

EDIT: i.e. if the developer doesn't specify music, or specifies optional music, then the levels will load with default/secondary music rotation. However, if the developer specifies primary-only, then the levels will require installation of their primary music tracks in order to load.

I'd be fully in favour of this btw, but probably more so in the event of an easy-pack-downloader being implemented.

My philosophy here is basically that it feels wrong to actively support it, but it also feels unnecessary to actively make efforts to prevent it.

So:
- Don't expect any specific "download without music" options if a pack download feature happens, or if there is one, expect it to require the author to opt-in to allowing it on their pack.
--- However, the ability to not re-download the music when updating is not only acceptable, but desirable, in my opinion.
- At the same time, don't expect any feature that tries to prevent a level loading if the music is missing.
- Do expect support for specifying fallback music, both in music.nxmi and in level files; but not until V12.10.X.

- The "random music on loose levels where no music is specified" is entirely outside the scope of that issue. If no music is specified, and it's a loose level, the creator either doesn't care, or hasn't specified what they want the music to be; in either case, "random" is just as acceptable as "depends on its position in the level list".
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

WillLem

Quote from: namida on April 09, 2020, 12:36:01 AM
the ability to not re-download the music when updating is not only acceptable, but desirable, in my opinion.

Totally agree - it should be a one-time download, absolutely.

Quote from: namida on April 09, 2020, 12:36:01 AM
- At the same time, don't expect any feature that tries to prevent a level loading if the music is missing.

Yeah, I guess it's different with music: as Proxima said, the file sizes can be huge, and people can just mute it anyway without it affecting the level. I hadn't thought of it that way, but in that sense it's different to level graphics, which are necessary.

Quote from: namida on April 09, 2020, 12:36:01 AM
If no music is specified, and it's a loose level, the creator either doesn't care, or hasn't specified what they want the music to be; in either case, "random" is just as acceptable as "depends on its position in the level list".

I'd add to this that if a player wants a particular music track on a particular loose level, they can of course edit their copy of the level accordingly.

namida

Loose levels outside of a pack play random music as of V12.9.2.

I've added the fallback tracks to the "things to do in V12.10.X" list.
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

namida

Implemented in commit 51b951e.

Multiple tracks (as many as the user likes) can be specified, seperated with semicolons. Existing rules remain in effect re: priority when multiple files with the same name (but different extension) are present.

NL's behaviour is that it will go through the list of tracks the level itself specifies until it finds one that exists. Should all of them be absent (or the level not specify any), it does the same with the applicable line from the in-effect music.nxmi file. If no valid track is found from either approach, no music will be played. The "applicable line" from the music.nxmi file is the same as currently - based on level order if in a pack, or random if in testplay mode / a loose level.

No change is needed to existing levels and/or music.nxmi files. They'll continue to work exactly as they always have, this is simply an additional feature that can be used in them if desired (or completely ignored if not).
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

namida

Reopened because of another idea that came up in Discord that's related to this - the option to explicitly specify random music.

I see three forms of this that could be of interest and that I'd be willing to do if the interest is there:
a) Allow overriding the "level 1 plays track 1, level 2 plays track 2" etc aspect of using music.nxmi, in favor of "each level picks randomly", as is what happens with loose / testplay mode levels currently. This would presumably be specified in the music.nxmi itself, so can be applied (or non-applied) to any scope which a music.nxmi itself can be.
b) Expand the explicit "play Xth music from standard rotation" specification to also have a "play random music from standard rotation" option.
c) Where a priority order is specified in music.nxmi or a level file, provide a way to specify that the priority order should be shuffled - thus, essentially, this is "specify a few choices, and pick one at random, ignoring those that don't exist and maintaining existing fallback behaviour if none exist".

In the case of C, I'm not willing to get into complex interactions. The randomness would be all-or-nothing. So you could tell a level "pick one of blah, derp, zonk, weep, orig_07 or orig_10 at random" (and it would ignore any of those that don't exist), but not "pick one of blah or derp, if neither exist pick one of zonk or weep, if neither exist pick one of orig_07 or orig_10".

And to be clear, these three are not mutually exclusive.

Is there enough interest in such a feature?

(EDITED 29/06 for clarity.)
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

Proxima

Quote from: namida on June 28, 2020, 07:14:27 PMIn the case of C, I'm not willing to get into complex interactions. The randomness would be all-or-nothing. So you could tell a level "pick one of blah, derp, zonk, weep, orig_07 or orig_10 at random" (and it would ignore any of those that don't exist), but not "pick one of blah or derp, if neither exist pick one of zonk or weep, if neither exist pick one of orig_07 or orig_10".

Would you be able to have the level file ask for a random selection, while still having a specified fallback in the music.nxmi in case the user doesn't have any of the tracks? If so then this is something I would like to have.

namida

QuoteWould you be able to have the level file ask for a random selection, while still having a specified fallback in the music.nxmi in case the user doesn't have any of the tracks? If so then this is something I would like to have.

Usual "if specified music fails, music.nxmi is used as fallback" will apply. I just mean in the sense you can't specify eg. "try one of these three at random, if none exist try this fourth one, and only THEN fall back to rotation".
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

WillLem

Quote from: namida on June 28, 2020, 07:14:27 PM
So you could tell a level "pick one of blah, derp, zonk, weep, orig_07 or orig_10 at random" (and it would ignore any of those that don't exist), but not "pick one of blah or derp, if neither exist pick one of zonk or weep, if neither exist pick one of orig_07 or orig_10".

Is there enough interest in such a feature?

Sure, this seems like a nice bonus to extend the feature already implemented.

Also, I'd say that whilst zonk or blah would likely be my preference, derp or weep are OK as well, so ultimately whichever the randomizer chooses is fine ;P

namida

Implemented all three of the above ideas in commit 2aea34f.

A's implementation is that by adding a line with the keyword "RANDOM" to a music.nxmi file, it will be interpreted as "pick a track at random" instead of "cycle through the tracks in order". This can safely be added to music.nxmi files on existing NL versions - it won't do anything but it won't hurt anything either.

B's implementation is - additional to the current support for specifying eg "?24" as the music (without quotes) to mean "use the 24th music in the standard rotation", you can now specify "??" as the music to simply mean "pick a random track from the rotation". Both of these can be specified as either the only music option for a level, or as one entry in a priority order. Levels using this will likely be treated as "music not found" on existing NL versions.

C's implementation is - if you place a ! at the start of a music list (either in a level or in a music.nxmi), instead of being interpreted as a priority order, it will be interpreted as "pick one of these at random". (If the selected one is missing, it will try another one, until one that isn't missing is found - exhibiting normal fallback behaviour if none are found.) Levels using this will likely be treated as "music not found" on existing NL versions.
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)