VortexCoyote / leraine-studio

A cross-platform portable open-source VSRG chart editor written in C++ with SFML.
Mozilla Public License 2.0
14 stars 6 forks source link

Stepmania format import and export #12

Open VortexCoyote opened 3 years ago

VortexCoyote commented 3 years ago

Add functionality to parse and export stepmania files. This might require some rethinking in what modules should do what, since the stepmania file format already includes things such as beat division for notes.

poco0317 commented 3 years ago

Keep in mind for essential purposes (metadata, bpms, notedata) .ssc is the same as .sm - the distinction is basically just that ssc has additional features. That being said, largely usable basic sm support would simply involve support for parsing notedata (including fake taps, "roll" hold subtypes, and mines) and the bpm parsing.

The ssc format offers chart-specific bpms (all timing data) and audio, unlike the sm format which forces all charts to use the same bpms and audio.

You may as well also throw in .dwi support since the main difference between dwi and sm is the notedata format. The song offset is called #GAP and is in milliseconds rather than seconds. These files also only have 1 bpm.

Keysounds in sm/ssc files involves an interesting layout of the keysounds within the noterows: in a given noterow of 4 columns, normally you expect a single tap on column 3 to be 0010. If that tap was mapped to a keysound at index 6 (keysounds are stored in a 0-indexed array #KEYSOUNDS) then the noterow would be 001[6]0

Stops, delays, and time signature support was present in .sm but for the most part the only one that is used is stops. Time signatures as we know it are basically nonfunctional in stepmania and nobody uses them. The ssc format throws on top of it some features familiar to other games like forced scroll speeds or warps. Warps are present in the sm format as negative or 0 bpms. At this time I'm not aware of how to convert negative bpm to a warp.

All 3 of these filetypes use a format called MSDfile (unrelated to Etterna MSD) which defines how the metadata is read in each file generically.

kangalio commented 3 years ago

Maybe Etterna's .sm/.ssc/.dwi import and export code can be reused?