Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce pack.ini/group.ini #266

Open
teejusb opened this issue May 29, 2024 · 6 comments
Open

Introduce pack.ini/group.ini #266

teejusb opened this issue May 29, 2024 · 6 comments
Labels
enhancement New feature or request help wanted Extra attention is needed

Comments

@teejusb
Copy link
Collaborator

teejusb commented May 29, 2024

Background

Over the years many many packs have been released. They're often related to some sort of series such as Mute Sims 1-X2, Sudziosis 1-5.5, Valex 1-10, etc. Since many people keep all packs around since disk space and loading times have been less of an issue over the years, peoples' song wheels have grown quite a bit. There have been some ways to make scrolling not take as long such as using the IIDX style song wheel so that when opening a pack, you only see the songs in the pack until you "exit" the pack.

Packs themselves are missing a lot of other functionality that song items get, such as display names, transliterated titles, etc. A lot of this functionality can be added and we recommend the following:

Proposal

Introduce support for a file called pack.ini (or group.ini since that is the technical internal ITGmania term). For starters we can have the following structure, with all keys optional falling back to current behavior.

[Group]
DisplayTitle=Mute Sims 12
SortTitle=MuteSims X2
TranslitTitle=
Series=Mute Sims
SyncOffsetMs=9

The [Group] header can be renamed to something else, but seemed fine.

DisplayTitle - will be what is displayed to the user and supersedes the actual folder name on disk. This will allow us to add unicode characters to pack names without breaking loading functionality due to OS issues (e.g. Windows handles loading files with unicode poorly)

SortTitle - This will be used for sorting purposes on the song wheel. This will allow users to control the ordering of song packs in the wheel. Many packs series have more than 10 releases so the sorting gets affected (i.e. 1, 11, 12, 2, 3, 4, 5). This will allow the display name to be different than how it's sorted.

TranslitTitle - Just a way to allow transliteration for packs, similar to songs.

Series - The name of the pack series. This will allow us to add subfolders to the song wheel (an additional option similar to the IIDX style). The players song wheel will then be Series -> Pack -> Songs. Packs not part of a series listed can stand on their own (Pack -> Folder), i.e. the current default. The UI can display it accordingly.

SyncOffsetMs - Defines what offset the pack is based off of. This should also support two specific enums, NULL and ITG, which should translate to 0 and 9 respectively. This can be used to implicitly normalize the sync across all packs on a setup and help remove the ITG bias overtime. We can introduce a preference to dictate the default sync of a setup.

Implementation Details

There are a quite a few technicalities to consider here:

SONGMAN and other classes has various functions that return group info. A lot of them are like GetGroupName, GetGroupForSong, LoadFromSongGroup, etc. We need to consider what should be the behavior of this change.

Current behavior returns the path on disk. My proposal is to introduce a new class exposed to lua called Group which encapsulates all this information and then introduce getters for the fields/class itself wherever its necessary. That way current behavior doesn't change, and we have access to the new fields.

We need to add engine side songwheel support for adding series/subfolders to the wheel.

Discussion

Since people might have a good number of opinions, we can use this issue for any further discussion and also to track the progress.

@teejusb teejusb added enhancement New feature or request help wanted Extra attention is needed labels May 29, 2024
@Lisek573
Copy link

As someone who has been pushing for this for quite some time, I absolutely support this going forward.

Here is the pack.ini that I have created for the release of The Starter Pack of Stamina 2:
SyncBias=NULL Name=The Starter Pack of Stamina 2 Group=The Starter Pack of Stamina Credit=StarrySergal,ChasePines,Tuuc,Lisek,zankoku,Kommisar,Braeden,Gpop,mang,Mango,yutsi,Robbumon,Lugea,sorae,t3a,NAOKI,Halogen-,Nandii,Galaga,zkldi,Create!,ar2k[]Frondal,Bird Banner=_banner.png

Due to this not being standarized at that time (or still) I just went with whatever was suggested by community and that one article online. But as you can see there are two additional things that are in the file I have provided:
Credit -> being a list of simmakers that have worked on the project. This would technically help to find who worked on the pack easier as not every pack contains simmaker name in the title. This is also with having in mind that someone potentially can make parser of pack info online to show off them online. Optionally Credit could be split into "CreditLeader", "CreditStepmakers", "CreditGraphic" and "CreditAdditional" for multipeople projects where people have different roles?
Banner -> as sometimes there can be additional files thrown into the folder, would be nice to have a pointer for banner.

Other things that I can suggest with going from the stuff from above.
Jacket -> pointer for jacket file for themes that use them instead of banners.
Link -> link to creator website, social media or similiar.
PackType -> what is the intended playstyle of pack - keyboard, tech, stamina
Description -> short description for parsers, what is included as far as rhythm genres come or just ad.

As for naming convention
[Group] -> [PackInformation] would be more descriptive. Could also be split into part for strictly SM metadata and additional parsing information?

@teejusb
Copy link
Collaborator Author

teejusb commented May 30, 2024

This would also address: #171

@jsirex
Copy link

jsirex commented May 30, 2024

Opinion: https://meow.garden/eliminating-the-9ms-bias/ - I like SyncBias name instead of SyncOffsetMS. It confuses with OFFSET.

@jsirex
Copy link

jsirex commented May 31, 2024

#268

@florczakraf
Copy link
Contributor

I'd love to see this as an opportunity to also include:

  • pack version (there are often patch releases but there's no obvious way to know what version we're running)
  • download link (sometimes people pop into live streams and ask for this but there's no single place to look for a pack these days)

Other stuff that comes to my mind -- not really for people to tinker with manually, but maybe for tools?

  • checksums for all files in the pack (could be used while patching to verify consistency of the pack / remove files deleted in a newer version -- this would probably require a separate section)

@phantom10111
Copy link
Contributor

I think that it would be a good idea to be able to specify all this info (or at least a subset of it) not just for groups but for individual songs as well.

The reason is that I think it's not uncommon for people to make custom groups with a mix of various songs and it would be good if in that case at least the sync offset could be corrected even if the songs come from different packs. That could be achieved by looking for the .ini files in song directories as well and using them as overrides for what's specified in the group.

And one special case where having all this info available at song level is particularly useful is putting songs in a USB profile. You can't have separate groups there so it's really important that each song can have its own set of metadata. On top of making sure that the sync is correct, that would potentially allow the engine to separate the songs into virtual groups based on the metadata.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

5 participants