Michael Votaw
753dfec5db
Always generate smNoteData from parsed data, to ensure consistent string representation of stepchart
2025-03-24 22:21:19 -07:00
Michael Votaw
9a7cf4511f
Removed unused 'isEmpty' variable
2025-03-24 22:21:19 -07:00
Michael Votaw
90bdb5e2a6
Check that lines at least has one line, to prevent infinite loop
2025-03-24 22:21:19 -07:00
Michael Votaw
0c1603e15e
Round bpm and beat to 3 decimal places using std::round() instead of just truncating to 3 decimal places (fixes discrepancy in GS hash generation)
2025-03-23 01:26:45 -07:00
Michael Votaw
25351a2f60
Strip any comments out of smNoteData string before calculating groovestats hash
2025-03-23 01:26:45 -07:00
Michael Votaw
e47c7fd9c0
Enable calculating GrooveStats hash, and set the hash version appropriately.
2025-03-23 01:26:45 -07:00
Michael Votaw
8619fd0b0d
Remove duplicated declaration of MinimziedChartString();
2025-03-23 01:26:45 -07:00
Michael Votaw
261c60d19e
Added lua function GetGrooveStatsHashVersion
2025-03-23 01:26:45 -07:00
Michael Votaw
3eab66808b
Added a #GROOVESTATSHASHVERSION tag and CURRENT_GROOVE_STATS_HASH_VERSION constant
2025-03-23 01:26:45 -07:00
Michael Votaw
c845205de5
Add a Lua method for forcing recalculation of GrooveStats hash.
2025-03-23 01:26:45 -07:00
Michael Votaw
a70f1a015a
Added missing header import and SetCachedGrooveStatsHash() method
2025-03-23 01:26:45 -07:00
Michael Votaw
1138b505f8
Set default value for m_bIsCachedGrooveStatsHashJustLoaded
2025-03-23 01:26:45 -07:00
Michael Votaw
25a3979975
Added methods for writing/loading #GROOVESTATSHASH to cache. When calling Lua GetGrooveStatsHash(), calculate it if it's not already been calculated.
2025-03-23 01:26:45 -07:00
Michael Votaw
632f456ea0
Added functions for generating GrooveStats hash for a given chart.
2025-03-23 01:26:45 -07:00
Michael Votaw
81bc4067c7
Increment FILE_CACHE_VERSION
2025-03-19 23:19:00 -07:00
Michael Votaw
bb6f55e8b9
Explicitly cache #PEAKNPS instead of deriving it from NPSPerMeasure.
2025-03-19 23:19:00 -07:00
Michael Votaw
239d38d5aa
pre-initialize size of vectors for writing nps/notes per measure to cache file.
2025-03-03 21:24:17 -08:00
Michael Votaw
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 Votaw
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 Votaw
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
Michael Votaw
9fd4c38efd
Keep a temporary State object around instead of allocating and deleting one nearly every time initResultState is called
2025-02-11 19:39:03 -08:00
Michael Votaw
46c3442018
non-void functions should return values!
2025-02-11 19:39:03 -08:00
Michael Votaw
b52ea2257b
wrap global function in anonymous namespace
2025-02-11 19:39:03 -08:00
Michael Votaw
97cefc6d71
Reduce the precision of nps to 3 decimal places, and don't use ssprint to join all of it together (very very long charts would cause a stack overflow on Windows)
2025-02-11 19:39:03 -08:00
Michael Votaw
6a7dd95212
Removed ASSERTs. StepParityGenerator::analyzeNoteData() now returns a boolean to indicate whether it succeeded at analyzing the note data.
...
Fixed issue where getFootPlacementPermutations would return no permutations in some circumstances
2025-02-11 19:39:03 -08:00
Michael Votaw
4e7432a5a0
Several "structural" changes, and some memory optimizations:
...
- Replaced use of bare '-1' values with StepParity::INVALID_COLUMN
- Removed StepParityGraph object, moved its responsibilities to StepParityGenerator
- Removed some unnecessary data from State object, added 'combinedColumns' and 'whatNoteTheFootIsHitting'
- Created stateCache to allow reuse of state objects
- Fixed a very small bug with TechCounts (missing 'previousPreviousHeel != INVALID_COLUMN')
2025-02-11 19:39:03 -08:00
Michael Votaw
61ee3bc329
Replaced costs array with just a single cost value
2025-02-11 19:39:03 -08:00
Michael Votaw
cbfd09658f
Check that previousPreviousRightHeel is a valid column placement
2025-02-11 19:39:03 -08:00
Michael Votaw
e5ccaca5f1
Removed use of this. Added additional comments from SL implementation.
2025-02-11 19:39:03 -08:00
Michael Votaw
a2a2684d0f
Remove VERSION_TECH_STATS, because we're not actually updating SSC version
2025-02-11 19:39:03 -08:00
Michael Votaw
ea35af311e
Reset FILE_CACHE_VERSION to 228
2025-02-11 19:39:03 -08:00
Michael Votaw
6917d51d4d
Replacing spaces with tabs
2025-02-11 19:39:03 -08:00
Michael Votaw
53ebe4cce1
Removed now unnecessary tracking of previous/current foot placements (we can get this from row.whereTheFootIs).
...
Add full and half crossovers
2025-02-11 19:39:03 -08:00
Michael Votaw
c9af5d78a3
fix typo (missing comma)
2025-02-11 19:39:03 -08:00
Michael Votaw
c7af0a4436
Integrated noteCount, whereTheFeetAre, and columns into Row object (makes tech counts a little cleaner)
2025-02-11 19:39:03 -08:00
Michael Votaw
212b99a4c5
Changed StageLayout into a struct and consolidated layout math functions into it.
...
Added convenience methods for determining if a given column is an up, down, or side arrow.
Added explicit tech counts for up footswitches and down footswitches
2025-02-11 19:39:03 -08:00
Michael Votaw
36c4223a38
Destroy array of costs after we're done with them
2025-02-11 19:39:03 -08:00
Michael Votaw
d5817b6264
Fixed typo (missing semicolon)
2025-02-11 19:39:03 -08:00
Michael Votaw
5f7720a8b8
Added costs for "slow" bracketing (to prioritize jumps), twisted backwards foot.
...
Removed costs for JUMP, CROWDED_BRACKET, and OTHER
Added cutoffs for counting footswitches and doublesteps below a certain speed as tech
2025-02-11 19:39:03 -08:00
Michael Votaw
f70cb4c6aa
Jacks and Doublesteps don't count if they're preceded by a jump
2025-02-11 19:39:03 -08:00
Michael Votaw
033cb10f17
Footswitches don't count if it's just using a different part of the same foot.
2025-02-11 19:39:03 -08:00
Michael Votaw
9c959d7dee
Cutoff for jacks is 170bpm 1/8th notes, and not after jumps
2025-02-11 19:39:03 -08:00
Michael Votaw
ed2b5f8d5e
Removing accidentally duplicated lua methods, un-needed SetGrooveStatsHash method (that's getting handled in a different PR)
2025-02-11 19:39:03 -08:00
Michael Votaw
905e44330a
Added methods to load/write tech counts to cache.
2025-02-11 19:39:03 -08:00
Michael Votaw
bd897b676a
Replacing use of CalculateRadarValues with CalculateStepStats, and ReCalculateRadarValuesAndLastSecond with ReCalculateStepStatsAndLastSecond
2025-02-11 19:39:03 -08:00
Michael Votaw
afa44ee4df
Added methods for calculating and caching tech counts
2025-02-11 19:39:03 -08:00
Michael Votaw
6109105f97
Added TechCounts and all of the StepParity classes
2025-02-11 19:39:03 -08:00
Michael Votaw
10a4a972b0
Added method to NoteData to get number of mines at given row.
2025-02-11 19:39:03 -08:00
Michael Votaw
28270cee31
Made StepsTypeToString publicly available
2025-02-11 19:39:03 -08:00
Michael Votaw
6788df0238
Added MeasureInfo to CMakeData-data.cmake
2025-02-11 19:39:03 -08:00
Michael Votaw
429fab2fbc
Added MeasureInfo calculations, and loader/writer for #MEASUREINFO cache
2025-02-11 19:39:03 -08:00
Michael Votaw
f96ee75ccc
Return the noteType for columnCues instead of isMine.
2024-08-11 09:43:54 -07:00
Michael Votaw
5db1a56d48
Add ColumnCues calculations, exposed to themes via Lua function on Steps object
2024-08-11 09:43:54 -07:00
Michael Votaw
e657a75153
Added OldStyleStringToSongSort() function to map best/worst/gradebest/gradeworst to their SongSort counterparts.
...
Added CourseLoaderCRS::SetCourseSongSort() to parse and set SONGSELECT's SORT parameter.
2024-03-06 01:45:26 -08:00
Michael Votaw
84553d4a50
Refactored code for writing #SONG entries in CourseWriterCRS
...
Added method for writing #SONGSELECT entries
Added new boolean flag bUseSongSelect to CourseEntry
Added new function StringToSongSort()
Renamed "LIVES" to "GAINLIVES"
2024-03-06 01:45:26 -08:00
Michael Votaw
be87de401a
Added additional criteria to StepsCriteria and SongCriteria
...
Added new m_sSongName property to Song class
Slight refactor in Song::LoadSongFromDir() to set m_sSongName
Implemented the basics of #SONGSELECT course parameter
2024-03-06 01:45:26 -08:00
Michael Votaw
343f2de657
Changed SongCriteria.m_sGroupName to a vector m_vsGroupNames, to allow for the potential to select a song from more than one group.
2024-03-06 01:45:26 -08:00
Michael Votaw
f44357c3f5
Added BPMRANGE song option for Courses.
...
Started breaking out some of the logic in CourseLoaderCRS into smaller functions for readibility.
2024-03-06 01:45:26 -08:00
Michael Votaw
eeb2528612
If a song has any time signatures defined, but doesn't include for for beat 0, add one.
...
(Fixes a crash that can occur with some songs if functions like TimingData::NoteRowToMeasureAndBeat are called for rows that don't have a time signature defined)
2024-02-08 01:35:06 -08:00
Michael Votaw
29a265713f
When sorting course songs by GRADEBEST or GRADEWORST, check if GAMESTATE has a master player before calling SongUtil::SortSongPointerArrayByGrades().
2023-12-13 09:12:21 -08:00
Michael Votaw
c9750159fb
Added missing GRADEBEST and GRADEWORST cases for CourseWriterCRS
2023-12-13 09:12:21 -08:00