* build(client): add 'lintfix' target matching the server
* docs(lr2hook): suggest lr2_chainload instead of BokutachiLauncher.exe
BokutachiLauncher.exe is no longer a part of BokutachiHook.
* refactor(server/lr2hook): G-ATTACK, P-ATTACK and HAZARD are not HARD
* feat(server/lr2hook): parse extendedJudgements
* feat(server/lr2hook): use fast-slow and early/late judgements
* test(server/lr2hook): make clear that in this test notesPlayed != notesTotal
* feat(server/lr2hook): calculate BP by hand when exiting chart early
* feat(server/lr2hook): parse rseed
* feat(server/lr2hook): parse extendedHpGraphs
* feat(server/lr2hook): parse unixTimestamp
* feat(server/lr2hook): use unixTimestamp as score play time
Especially useful as BokutachiHook now retries sending scores after some
time on connections errors.
* feat(common/bms+server/lr2hook+docs): add gaugeHistory{Easy,Groove,Hard}
Could also save graphs for unimplemented gauges, not done here as I
don't know if they are ever going to be implemented while they take some
decent space.
* feat(client/bms): support several gauges
Ugly IIFE inside IIFE is work-around for eslint bug `Expected a 'break'
statement before 'case'`.
* fix: iidx-mdb-parse ParseIIDXData: check for moreData before using continue;
* feat: initial iidx 33 support
* feat: iidx 33 eamuse csv support
* feat: iidx 33 tables and folders
* fix: some charts missing from iidx 33
* sdvx: add ac MAXXIVE CLEAR lamp
* seperate USC lamps from SDVX for tests
* Add maxxive in converter for api-cg/sdvx
* feat: add migration
* fix: pre-empt service support
* lint(fix)
* fix: my typescript tooling stopped working
* fix: test
---------
Co-authored-by: blobdash <fruityenloops@gmail.com>
Co-authored-by: zkldi <20380519+zkldi@users.noreply.github.com>
* feat(maimaidx): graphs
* fix: use 4dp for percent graph
* fix: use simple boolean check for duration
song duration is either a number or not defined, based on the schema.
we also don't really want to make a graph if the song has 0 duration, that's nonsensical
* add durations for omnimix songs
* [chunithm] split lamp into combo lamp and clear lamp
* ignore nonsense lint
* fix myt converter tests
* fix chunitachi batch manual
* mfw edited wrong file
* fix(migration): only migrate lamp-related showcases
* remove chart lamp showcases
* remove unused imports
* fix: limit re-pb to chunithm scores, migrate chart lamp showcases to comboLamp
* fix migration of comboLamp progress
* fix: updateMany with multi: true
* fix: when updating references, ensure only known IDs are in
* fix(client): make red stand out more
* fix(client): lamp sorting
* feat(server): validate clear and combo lamps based on judgements
* fix(server): validate combo lamps based on score boundary
* fix: reword validation errors to stay consistent
* fix: correct explanation
* fix: how was I this stupid?
* fix: update blacklisted scores too
* fix: bulk write all the updates
* fix: bulkWrite harder
* fix: i probably need sleep
* all of game-settings to bulkWrite
* fix folder lamp goal nonsense
* maybe fix colors
* fix: name PB merges
* chore: properly test PB merge
* mfw reversed
* fix(SessionRaiseBreakdown): lamp name
* rename to noteLamp
* why is eslint even complaining here?
* rename the enums
* fix tests
* tweak colors of lamps
* feat: chunithm score graph
* feat: add life
* feat: add song duration data for all songs
* fix: make chunithm graphs non-nullable
* fix: test data
* fix: potrząsanie kanalizacją
* fix: misleading old function name
* fix: make duration optional for chunithm
* fix: add the missing duration
* [maimai DX] PRiSM final
* add Supersonic Generation
This is a PRiSM PLUS song in Japanese region, but a PRiSM song in International.
As a way to compromise, the display version is PRiSM PLUS, but it also shows up in
the PRiSM folder. This should be removed when PRiSM PLUS hits Tachi for real.
* add PRiSM Omnimix
* disable BUDDiES PLUS tables
* add PRiSM Omnimix to versions in config
* pick correct default table
* fix test data
* fix mock db
* feat(score-import): Initial support for jubeat imports from CG
* feat(client): enable jubeat imports from cg through dashboard
* feat(api-cg/jb): further implementation of jubeat import from cg
* feat(api-cg/jb): create test
* fix(api-cg/jb): test on testingdb only has one chart
* refactor(api-cg/jb): cleanup converter
* fix(api-cg/jb): fix test mkOutput usage
* fix(api-cg/jb): validation of the int to enum conversion from cg
* feat(client): frontent jubeat import routes for cg
* feat(bot): add jubeat cg import command
* feat(client): rating alg name override
* Added a nameOverride field to RatingAlgorithmConfig
* Added FormatGPTXRatingName
* Renamed maiDX `Rate` to `Rating`
* Renamed Ongeki `Rating` to `Classic Rating`
* fix: there's more
* fix: this doesn't need to be in common
* chore: revert this
* docs: document the new rating description
* [chunithm] Update to CHUNITHM VERSE
* fix: change naiveRating to 50 songs
* fix: unfuck duplicate charts caused by later options modifying earlier options
* feat: new rating classes for verse
* fix(bot): chunithm min scores is 50
* add charts to VERSE Omnimix
* add search aliases for new songs
* disable verse intl for now
* feat(make-table-inactive): toggle table instead of just marking as inactive
* fix: enable sun plus folders for myt + mark sun as inactive
* feat(maimaidx): add PRiSM support
* fix: floating-point profile rating calculation
* fix: add chunithm and make the test clearer
* fix: add rating formatters
The implicit formatter is FloorToNDP(). Ugh.
* fix: missing inGameIDs on omnimix songs WaterCube and concon
* fix: add-2dxtra: make sure only old 2dxtra charts get deprimaried
* feat: support iidx 31-2dxtra
* fix: add some missing altTitles for iidx32 eamuse CSVs
* fix: deprimary 30-2dxtra songs whose current inGameID has changed
* feat: add recently released iidx32 charts
* fix: iidx-mdb-parse: search terms were discarded for new songs
* feat: initial iidx32 support through 20241210
* fix: forgot folders/tables for iidx32
* New match type: `ddrSongHash`
* style: sort `MatchTypesWithDifficulty`
* make `ddrSongHash` a song property instead of a chart property
* docs: add descriptions for match type `ddrSongHash`
* add `ddrSongHash` field to all applicable songs
* fix: enforce ddrSongHash is only used on DDR
---------
Co-authored-by: zk <zkldi.dev@gmail.com>
* feat: implement graphs
* fix: remove a dbg field
* fix: implicit anys
I don't know why it doesn't complain about other files.
I don't know why the server check failed. Works on my machine.
* fix(client): use the rating formatter specified in tachi-common for history graph
* adjust margins so the rating numbers fit
* museca: drop decimal places from profile rating
* adjust margins again to accommodate for wacca/jubeat/gitadora
* chore: lint
* feat: support exScore, fast, slow, maxCombo as optional metrics for DDR
* chore: lint-fix in common
* fix: remove exScore from calculated metrics for DDR
* fix: use clearer logic for number|null
---------
Co-authored-by: zkldi <20380519+zkldi@users.noreply.github.com>
* Add gitadora mdb parser and update seeds
# Conflicts:
# seeds/scripts/rerunners/gitadora/parse-mdb.ts
* Bail early if missing critical data & handle no ascii title
* Correctly handle case where a song has no credited artist
* Correctly handle case where a song has no credited artist
* Add blank strings for songs that have no credited artist
* Improve documentation
* Correctly parse the score byte array for drum/bass difficulties
* Align comment styles