Commit Graph
5651 Commits
Author SHA1 Message Date
sukibabyandteejusb 829f49f622 Fix NotesLoaderDWI.cpp
This resolves the following issues with DWI format simfiles:

- DWI files containing valid charts may fail to load and appear to have 0 or 1 notes
- DWI files opened in the editor would not save the original contents of the chart into a new file
2024-06-08 16:18:01 -07:00
sukibabyandteejusb 12ceb7fc7c Clean up DoChangeTheme()
I moved the logic for getting the new screen name into a separate function GetNewScreenName(), for the sake of containing the logic for getting the new screen name in one place.

I tried some different optimizations for GetNewScreenName(), however none of them were much of a performance savings over the original code, if any, when viewed in a disassembler, so I ultimately chose to keep the original code.
2024-06-08 15:59:48 -07:00
sukibabyandteejusb de351c7228 Don't change priority if game loses focus
This is what really causes problems when alt-tabbing in and out of the game, with OBS, etc. 

ITGmania uses less than 5% CPU usage on my 10 year old CPU. I can leave ITGmania running in the background with assist tick going and no notes are getting lost or stuttering.

It's not really worth shifting all the threads to a lower priority in the name of saving resources, considering how few resources the game consumes.
2024-06-08 15:36:18 -07:00
Rafał Florczakandteejusb 903fa7eea3 Treat type-limits as errors in GNU builds 2024-05-30 17:38:47 -07:00
Rafał Florczakandteejusb f7f88f9544 Guard against signedness of chars and wchars on different targets 2024-05-30 17:38:47 -07:00
Gareth Francisandteejusb 60c3dcd3d7 Add WITH_MINIMAID option to allow building on ARM 2024-05-30 17:38:47 -07:00
sukibabyandteejusb c2ac89dcb6 Improve calc_mean function
A problem with using std::accumulate to calculate the mean is that small numbers get rounded down to zero when dealing with floating point numbers. This is solved by implementing the Kahan summation algorithm (https://en.wikipedia.org/wiki/Kahan_summation_algorithm).
2024-05-30 17:36:55 -07:00
sukibabyandteejusb 6f86f3eae5 Restore comment in Actor.cpp 2024-05-29 10:30:49 -07:00
sukibabyandteejusb 03033857c2 Actor optimizations 2024-05-28 10:24:23 -07:00
sukibabyandteejusb 626e127589 Replace src/archutils/Win32/ddk/hidpi.h
From SDK 10.0.16299
2024-05-28 10:19:50 -07:00
sukibabyandteejusb b730a5a750 Remove AltiVec code
The content of src/archutils/Darwin/VectorHelper.cpp is very old, these are AltiVec and SSE2 instructions. This is only actually used in RageSoundMixBuffer.cpp. This level of micro-optimization is not needed since platforms this old are not supported by ITGm.
2024-05-28 09:34:59 -07:00
sukibabyandteejusb 558d84c37f Remove NTPAD check
NTpad is a driver for Windows 2000/XP which enables the use of a controller via the parallel port. This is not needed anymore and is just causing lag by constantly scanning the list of input devices on Windows.
2024-05-28 09:14:13 -07:00
sukibabyandteejusb b6f0da79a4 Change a lrint 2024-05-14 09:35:38 -07:00
sukibabyandteejusb 705a069400 Resolve the SM5 sync drift issue
Summary of changes

1) Fix issues in RageTimer and RageSoundPosMap
2) Calculate seconds from microseconds more accurately
3) Replace lrint(x) with static_cast<int>(x+0.5) for better performance
4) Replace C style casting with C++ style casting
5) Make important values 64-bit wide
6) Update RageUtil.cpp (timer conversion RStrings had some math which needed to be fixed after fixing RageTimer's math)
7) Ensure floating point math is done as floating point
8) Improve code commentary all around
9) Improve clarity and efficiency of RageSoundPosMap "return closest position" error logging
2024-05-12 08:05:41 -07:00
phantom10111andteejusb b365dcd65d PulseAudio: Hold mainloop lock during GetPosition() call
Mainloop lock needs to be held to access PulseAudio object from outside the
event loop thread, in particular in GetPosition() calls. Otherwise we might hit
a race condition and have the call fail. There's also a possibility that the
call might randomly fail if it's called before first timing data is received
for the stream, so handle that case as well.

Also fix the stream write callback to call Mix() with correct parameters, as
well as do the work in a loop in case pa_stream_begin_write() returns smaller
memory buffer than was requested.
2024-05-11 10:26:50 -07:00
phantom10111andteejusb bbf556450d X11: Don't call any X11 functions on fatal error
If X11 functions are called after a fatal error then it just triggers the fatal
error handler again eventually leading to stack overflow.
2024-05-11 09:46:26 -07:00
sukibabyandteejusb 3f8a7f5fd3 Run as "High Priority" on Windows
Enforcing HIGH_PRIORITY_CLASS is best for Win10+ where Windows Update can interrupt the game and it also prevents streaming apps (OBS/Discord) from causing stutter by taking rendering priority away from ITGMania.

Update ArchHooks_Win32.cpp
2024-05-10 00:33:36 -07:00
sukibabyandteejusb 3d63d80163 Always use CLOCK_MONOTONIC if it's available on Unix 2024-05-08 10:37:17 -07:00
sukibabyandteejusb eb8b428d0f Use range-based for loops in ScreenManager.cpp
Modernizing some of the old code - improve reliability by replacing traditional iterator loops where they are not needed.

Update ScreenManager.cpp
2024-05-08 01:55:51 -07:00
sukibabyandteejusb f7a7252dbb Replace timeGetTime() with QueryPerformanceCounter()
Update ArchHooks_Win32Static.cpp

This code provided a 7x accuracy improvement over timeGetTime(). (0.2ms vs 1.4ms std dev*3)

Rename variables to fit with existing naming mechanism
2024-05-07 17:57:47 -07:00
sukibabyandteejusb 8d24f61214 Don't warn user if frame size is not a multiple of 2
Disable this common nag warning + log file warning combination.
2024-05-07 10:20:12 -07:00
sukibabyandteejusb a5bbcebd0c Update BPMDisplay.cpp
Update BPMDisplay.cpp

Replace lrint with static_cast<int>+0.5

Proposed lrint change for the same reason as #235.
2024-05-04 10:52:43 -07:00
sukibabyandteejusb 2e2d49393b Replace lrint(x) with static_cast(x+0.5)
Update 9 files

Update RageSoundReader_Extend.cpp
Update RageSoundReader_Preload.cpp
Update RageSoundUtil.cpp
Update RageSoundReader_ThreadedBuffer.cpp
Update RageSoundReader_SpeedChange.cpp
Update RageSoundReader_Resample_Good.cpp
Update RageSoundReader_Merge.cpp
Update RageSoundReader_Chain.cpp
Update RageSoundMixBuffer.cpp
2024-05-03 23:17:59 -07:00
Gareth Francisandteejusb 99e3d10775 Reduce rate of X11 screensave interrupt to once/minute 2024-04-19 00:29:35 -07:00
Arthur Eubanksandteejusb bdafbd4660 Fix some clang warnings
-Wunqualified-std-cast-call and -Wsign-compare.
2024-04-17 00:20:03 -07:00
phantom10111andteejusb 481161574e PulseAudio: Report actual audio playback position
PulseAudio driver used to report position of last frame written to audio stream
instead of actual playback position. This kind of worked, since on average the
write position doesn't diverge too much from actual elaped time, but it can
result in note stuttering and in general isn't very accurate. Change the
implementation to use actual playback position from PulseAudio stream.

Remove some compatibity code with old PulseAudio, since version 0.9.10 was
released in 2008.

Also, as an optimization to avoid unnecessary memory copying, use
pa_stream_begin_write() to mix audio directly into PulseAudio memory.
2024-04-12 22:40:41 -07:00
phantom10111andteejusb cacaded0cd Windows: Set console output codepage to UTF-8 2024-04-12 22:40:09 -07:00
phantom10111andteejusb 3df79a3f11 Windows: Remove old mapconv and verinc project files
mapconv is being built by CMake so no need to keep its project files in the
repo. verinc isn't used anymore so it can be removed completely.
2024-04-12 22:40:09 -07:00
phantom10111andteejusb 58a45d91f4 Windows: Compile with /utf-8 flag
Add /utf-8 flag to compilation on MSVC. This flag makes sure that source files
and static strings included in the application are UTF-8 strings.
2024-04-12 22:40:09 -07:00
phantom10111andteejusb 9a55cb99c1 Windows: Add manifest with UTF-8 code page specification
On Windows 10 versions starting with 1903, this manifest will allow Win32 -A
family of functions to accept UTF-8 strings as arguments.
2024-04-12 22:40:09 -07:00
phantom10111andteejusb 7dd50cf995 Windows: Generate version number in resource file
Windows executable had an old version number hardcoded in the resource file.
Automatically generate a file with correct version set.
2024-04-12 22:40:09 -07:00
phantom10111andteejusb 48e797bf35 Move generated directory to build directory
StepMania generates some files during build but it's a bit unusual to generate
them in source directory instead of build directory. Move them to build
directory and remove src/generated from .gitignore.
2024-04-12 22:40:09 -07:00
Gareth Francisandteejusb 85bac5506e Prevent sound fade in/out from hitting assertion in fapproach 2024-04-11 10:59:03 -07:00
Gareth Francisandteejusb befae57e73 InputHandler_Linux_Joystick cleanup 2024-04-10 20:17:11 -07:00
Gareth Francisandteejusb ef86cbbda3 Remove limit of 4 joysticks in InputHandler_Linux_Joystick 2024-04-10 20:17:11 -07:00
Gareth Francisandteejusb 7009a16dea RageUtil::UnicodeUpperLower: Prevent negative characters from segfaulting under GCC 2024-04-10 14:09:10 -07:00
phantom10111andteejusb 208494b735 Fix coloring of BitmapText with overlapping attributes
When AddAttribute() is called multiple times with overlapping ranges, old
attributes need to be removed and/or fixed. Otherwise the old colors might
show up when the text is rendered.
2024-04-09 00:34:47 -07:00
phantom10111andteejusb 17c4e7a2ff Reset input redirection on screen change
It's possible for LUA to redirect input and not bring it back when screen is
ending (and there are existing bugs like this in Simply Love). Considering that
each screen is a separate entity, it seems like this shouldn't be possible and
each screen should handle redirection separately. Split redirection state per
each screen in the stack and clear it once screen is ending.
2024-04-04 11:16:51 -05:00
Curtis Ruedenandteejusb ce3cb266a1 Guard against division by zero crash
Closes #197.
2024-04-03 12:26:27 -05:00
teejusb 3138447138 It's fine to play tick/metronome for failed players. 2024-03-22 15:18:53 -07:00
SugoiFactoryandteejusb 7ac42c7f73 Don't skip high scores with a 0 in the Score field
Since itgmania is storing white counts in the Score field of stats.xml, ignoring these scores will eliminate quints when retrieving high scores.
2024-03-20 03:30:50 -05:00
phantom10111andteejusb c0c0d58219 Fix coloring of multiline BitmapText
BitmapText internally stores characters with newlines removed, since they don't
need to be rendered. Due to this, BitmapText::AddAttributes() needs to
recalculate attribute positions and lengths in order to apply them in the
correct place. Unfortuantely the code would calculate the position incorrectly
and completely ignore length. Fix it so that everything is correct even in
multiline text.
2024-03-12 16:15:48 -07:00
hayoreoandteejusb 338fdd8892 Add pump mirrors and language. 2024-03-06 16:10:21 -08:00
hayoreoandteejusb db7b7b425c Add LR and UD Mirror.
Adds a left-right and up-down mirror for 4-panel and solo modes.
2024-03-06 16:10:21 -08:00
Michael Votawandteejusb f8ce3c7db2 Explicitly get song bpm when checking if song matches songCriteria (m_fSpecifiedBPMMax and m_fSpecifiedBPMMin are only set if #DISPLAYBPM is used in simfile) 2024-03-06 01:45:26 -08:00
Michael Votawandteejusb 44d3711743 Removing already outdated comment 2024-03-06 01:45:26 -08:00
Michael Votawandteejusb dcb1a2e3db Equals signs also need to be escaped when parsing #SONGSELECT parameters. 2024-03-06 01:45:26 -08:00
Michael Votawandteejusb bf5404a71a CourseWriterCRS now correctly escapes control characters for certain parameters
CourseLoaderCRS handles escaped control characters and commas
Added new parsing functions to CourseLoaderCRS, ParseCommaSeparatedList, and ParseRangedValue
2024-03-06 01:45:26 -08:00
Michael Votawandteejusb e8947d9f70 Added a new SmEscape parameter to allow us to specify what characters to escape (defaults to '\\', ':', ';')
Added new SmEscape function to handle escaping a vector of strings
Added SmUnescape() to remove the '\\' preceding an escaped character.
2024-03-06 01:45:26 -08:00
Michael Votawandteejusb 1d332bf960 Modified MsdFile::ReadBuf() so that escaped characters are still skipped when bUnescape == false
As of this commit, this won't affect anything except CourseLoaderCRS, because everywhere else is passing `true` for the bUnescape parameter.
2024-03-06 01:45:26 -08:00