Commit Graph
36778 Commits
Author SHA1 Message Date
Crash Cringleandteejusb 9d61cb4c06 Okay we use -9ms here because this counters the +9ms folks add to their charts. Ensure we clear the series map when freeing songs 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 6fbbf931ac Use std::string instead of RString for mappings 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 218d5734a3 Change group map to an unordered_map 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 830bf1bb8d Change series map value from a vector to an unordered set, remove series prefixing, ensure always defaulting to group disk name for sorting 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb dd60d36093 Implement changes from feedback 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 694a724770 Move ASSERT_Ms to debugging and replace with warns, include <array>
(See feedback in PR)
Co-authored-by: sukibaby <[email protected]>
2025-03-03 23:25:32 -08:00
437f72b13d Update src/ScreenOptionsMasterPrefs.cpp
Co-authored-by: sukibaby <[email protected]>
2025-03-03 23:25:32 -08:00
0b3ed6d4f9 Update src/SongManager.cpp
Co-authored-by: sukibaby <[email protected]>
2025-03-03 23:25:32 -08:00
fc98959db4 Update src/SongManager.cpp
Co-authored-by: sukibaby <[email protected]>
2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb ec814a6b74 Add version to Pack.ini, auto populate this value in the Pack.ini if it isn't manually provided 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 48b5b35e23 Rewrite a few comments 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 53a26f2fa4 Add some nullptr handling 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb ac767b3ce8 Move GetGroup to SONGMAN, rename variables consistently, move "pack.ini" to constant var, flip sync bias sign 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb ea588c8504 Remove extra fields for now 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb e8f0d55d6e Add SONGMAN:HasGroupIni(string groupName) which returns true/false 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 05cd7ed922 reimplement "SyncBias" as something that tells us the sync of the pack so we may adjust accordingly rather than the blanket sync to apply to the pack. 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb f59a5b1e72 Rename group.ini back to pack.ini to avoid conflict with the existing waiei standard. See: https://github.com/waiei/Group.ini-lua 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb a7cb3b0264 Remove unnecessary GetSongs accessor from Group object 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 13e6aaacb3 start addressing review/feedback 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 00342feadc Add new preference: DefaultGroupOffsetSeconds to dictate the default sync bias on the machine when no group.ini is present (or if there is no SyncOffset field in said file).
- Generally Supports either ITG (9ms) or NULL (0ms).
- Alternatively, one could edit the preference manually to put a different value
- Name/Description probably worth ironing out
2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 835ca35065 Ensure the Group Offset is applied when Reloading a Song from Disk 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb fe1bfbdde2 Fix the AutoSync Relay showing Global Offset instead of the song Offset when Auto Syncing
- Unrelated to group.ini
2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 01eea5cd42 Remove additional leftover debug message 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 1bf9dd004d Use the Translit field from Group.ini, Migrate Banner code to Group class 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 520173ef5d Safe delete Groups 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb c06059b274 Further Group enhancements.
- Adjust the variable scope of group attributes
- Remove the now redundant GroupBannerPaths vector and replace its usage.
- Migrate ini loading logic to Group class
- Better clarity on comments for Group
- Remove GetTotalSongs in favor of GetSongs.
- Add Year as a value to Group.ini
- Ensure new group and song maps are cleared properly when freeing songs
2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 096d3093e4 Add Group files to cmake 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 5abaf5318a Move group into its own class, add Credit and AuthorsNotes fields, Begin exposing methods to lua 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 1aa44cacb6 Rename Pack -> Group for consistency. Remove leftover logging and extra lines from debugging.
Misc patches via PR review.
2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb e55475a295 Add enums for ITG/NULL in pack.ini for SyncOffset 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 798201cce4 Add Pack Offset and Group Banners to pack.ini, Remove debug logging 2025-03-03 23:25:32 -08:00
Crash Cringleandteejusb 5e6f3378a8 Thrown together Initial working implementation of pack.ini
# Conflicts:
#	src/MusicWheel.cpp
2025-03-03 23:25:32 -08:00
Michael Votawandteejusb 239d38d5aa pre-initialize size of vectors for writing nps/notes per measure to cache file. 2025-03-03 21:24:17 -08:00
Michael Votawandteejusb c0db6beb9c We don't need to set cached nps per player individually, just parse all of it and pass it to Steps 2025-03-03 21:24:17 -08:00
Michael Votawandteejusb 2625394ac0 Only store NotesPerMeasure and NpsPerMeasure values per-player if the steps type has different steps per player. 2025-03-03 21:24:17 -08:00
Michael Votawandteejusb fd790eb83e Replace #MEASUREINFO with two separate tags, #NPSPERMEASURE and #NOTESPERMEASURE. Stop storing MeasureInfo objects on Steps, and just directly store NpsPerMeasure, NotesPerMeasure, and peakNPS. 2025-03-03 21:24:17 -08:00
sukibabyandteejusb 2414595063 do_mad_frame_decode might return 0, protect against possible crash
In the song wheel, if you scroll back and forth over an MP3 song very fast, you might get some audible corruption at the beginning of the song preview, and it might even crash the game.

This fixes both of those problems.
2025-03-02 22:21:30 -08:00
sukibabyandteejusb 6f497f70e7 Use SetPosition_hard instead of SetPosition_toc for the mp3 position, remove dependency on accurate sync boolean
Resolves #610.

`RageSoundReader_MP3` has three different methods of setting the position. The default choice of `SetPosition_toc` is unable to provide an accurate result. The reason Edit Mode has such a severe desync when working with MP3's is due to the preference of using `SetPosition_toc`.

We can prevent this by using `SetPosition_hard` which works very well.  Judging by comments in the file, it seems like `SetPosition_hard` was too resource intensive to use as the default method, 20+ years ago.

The only downside is, if you start from an arbitrary position (which is **only** possible in Edit Mode), you have a few milliseconds of corrupted audio, but then the sync is perfect.  You can hear this in the demonstration video below.

When we start from the beginning of a file, such as playing a song, or using `Play whole song` in edit mode, `MADLIB_rewind` will be used.

`SetPosition_hard` provides an accurate result, and is consistent with the offset provided by `MADLIB_rewind`. The result is a consistent sync experience whether the MP3 is started from the beginning, or from an arbitrary position midway thru the file.

The `m_bAccurateSync` boolean dependency has been removed from SetPosition since it does not seem to provide any benefit on modern hardware. It seems fine to remove it so that we can call `MADLIB_rewind` or `SetPosition_hard` as fast as possible.

In my testing I never got `SetPosition_estimate` to be used, but I've left it in as a backup option.
2025-03-02 22:21:30 -08:00
sukibabyandteejusb 5326808f38 Revert "(Win32 refresh) LoadingWindow_Win32"
This reverts commit afc3083b3e.

Revert "be 32 bit"

This reverts commit 4d8d22d223.
2025-03-02 15:05:31 -08:00
teejusb ef649135bd Add itgmania.com to the list of allowed hosts. 2025-03-02 12:16:12 -08:00
teejusb 33039d61b4 Version bump to 1.0.0 2025-03-02 12:05:52 -08:00
Thomas Calvertandteejusb 1409bbcadf fixup: fix memory leak 2025-03-02 11:41:43 -08:00
Thomas Calvertandteejusb 788db3d826 fixup: link directly to issue 2025-03-02 11:41:43 -08:00
Thomas Calvertandteejusb fe3e73ae0d Linux: Detect joystick hotplug
Interface with libudev to get notified when a new joystick appears.

The code is in IH_Linux_Event rather than IH_Linux_Joystick because it
seemed like the former uses evdev (standard for most devices nowadays)
whereas the latter uses the old joydev API. The result should be the
same in any case...

Implementation is a bit messy due to LinuxInputManager only scanning for
devices from its constructor, this forces RageInput to have an exception
for LinuxInputManager. Possibly with more involved surgery a cleaner
solution could be devised...
2025-03-02 11:41:43 -08:00
teejusb 368c257e95 Rename to rate_scaling_enable_ + Expose functions to lua 2025-03-02 10:34:28 -08:00
Brandon Wandteejusb 9789ef9697 Give actors the ability to undo the rate change triggered by holding
tilde or tab.

This is gated by a new boolean, `tab_tilde_scaling_enabled_`, and
applied only to banners by default.
2025-03-02 10:34:28 -08:00
sukibabyandteejusb 2feb9e784c RageSoundReader_Merge fixes
This is the fixed Merge from the 2025-1-26 test build. It will more strictly check the drift with each iteration of the m_aSounds loop, whereas the original implementation can allow small amounts of desync to accumulate over time if none of them exceed the threshold.
2025-03-02 09:13:31 -08:00
sukibabyandteejusb 4f4167e3c7 Fix DirectSound and set it to default on Windows.
I've fixed the issues with the DirectSound driver which a number of commits from 2016 attempted to address. Additionally, build testers strongly prefer the fixed DirectSound to WaveOut (the current default driver for Windows) in terms of both game stability and sync stability, so I'm making it the default driver as well.

StepMania commit 75a9532 from 2006 had a subtle error, the declaration of len and locked_buf will hide the previous local declaration of these variables. The issues causing the DirectSound driver to be unreliable in terms of sync were due to this. This PR renames the variables from the 2006 commit to prevent this, and also ensures all variables are properly initialized.

Renamed `locked_buf` and `len` in `MixerThread` to `locked_buf_init` and `len_init` to avoid shadowing.

Prevent use of uninitialized member variables by initializing `m_pPCM`, `m_iSampleRate`, and `m_bShutdownMixerThread` in the constructor.
2025-03-02 09:11:25 -08:00
sukibabyandteejusb 5673d84567 undo whitespace changes in Threads_Win32 2025-03-02 09:04:34 -08:00
sukibabyandteejusb 1b258a4a00 use ExitThread instead of TerminateThread
Preferred in Windows, especially when we can't guarantee that we are able to perform a proper clean-up before terminating. Halt may be called with the Kill flag which indicates everything must shut down. This is the preferred approach in the Windows API.

Another preferred option is to use WaitForSingleObject with a timeout, but Halt with the Kill flag is being called when the game is about to crash, so that's not a realistic option and may cause the program to hang indefinitely.
2025-03-02 09:04:34 -08:00