IMPORTANT: This update removes the ability to instantiate from JSON using constructor
and
create
static method, which also includes the ability to mix-and-match between JSON and wrapper
attribute. While the simple fix for constructor
is to use fromJSON
static method, create
may
require effort to fix by transforming it into array and map into fromJSON
. Apologies for the
inconvenience as this move is deemed necessary when moving towards beatmap V4.
- New environment & color scheme
- Daft Punk
- Hip Hop Mixtape
- Beatmap Difficulty, Lightshow, Info and Audio Data v4
- Deduplication of data for v4 (EXPERIMENTAL)
- This only affects the JSON output
- Deduplication of data for v4 (EXPERIMENTAL)
- BPM Info/Audio Data class (subject to change)
- Includes loading and saving
- Beatmap object
fromJSON
static method - Beatmap JSON can now be passed onto
load
instead of just string path- Default file name to
LoadJSON.dat
- Default file name to
- Preprocessing and postprocessing options in
load
andsave
- This allows for arbitrary processing pipeline
load
preprocess and postprocess handles JSON and resulting class object respectively- The reverse is true for
save
- The reverse is true for
range
utils functionWritable
andDeepWritable
type utils
- Major structure change to Info
- Uses V4 info as baseline
- Difficulty characteristic is now part of difficulty
- Official color scheme is no longer nested
- Minor structure change to Difficulty
- FX Float Event is now part of event box instead of separated entity
create
andconstructor
now only accepts wrapper type- Use
fromJSON
static method for loading JSON schema
- Use
save
now return resulting JSONsave
options allows user to prevent file from being written
clone
method no longer usestoJSON
when cloning- This should result in much faster cloning
- Renamed
setFileName
tosetFilename
for consistency - Converting beatmap version to same version will now create a copy instead of returning the same data
- Converting beatmap now preserve custom data
- Nested load and save options now properly spread instead of replace
- Several class method now return
this
instead ofvoid
to allow chaining - Beatmap version is now read-only
- Internal logic optimised
- Utils rename for clarity
equalNear
->nearEqual
fixRange
->rearrangeTuple
(this may as well be removed or properly renamed)
- Test case not using the new default value
- Removed filter in FX collection construction to avoid potential index error
- New easings being disallowed to use
- Info set object/class, no longer available as of v4
- Mix-and-match constructor/create class object
- Was complicated and confusing to handle
- Lattice environment & color scheme
- Add
strobeBrightness
andstrobeFrequency
for v3 light color base - New v3 easings value
- The Rolling Stones environment & color scheme
- Beatmap v3 lightshow data
- Shallow copy on parse
- Proper promise for load/save (maybe)
- Remove sorting for FX base events
- Data check not skipping array check
- Old v2 custom data parsing outside of custom data
- Allow parser to accept any
object
record - Non-array
never
type receives dummy class to avoid null error when using alongside wrapper class type
- v3 beatmap not removing default on save (why am I like this?)
- Sorting for v2 beatmap causes script to crash
- Default brightness for light color base not being
0
is inconsistent with the rest
Couple of optimization work has been done to further improve memory and time efficiency. This focuses heavily on speed for faster iteration reason. Overall, it should result in up to 1.6x faster in general use case.
- Updated to beatmap v3.3.0
- FX Event Box Group
- FX Events Collection
- Linkin Park 2.0 environment & color scheme
- New SongCore features (tags, custom characteristic label, etc.)
- Predefined beatmap data clean method
- This handles only the known data to be cleanse which is significantly faster than deep clean method
- This can also avoid sensitive data like BPM Event where floating point must always be precise
- Info color scheme copy
- Ensure alpha for
toColorObject
invLerp
,remap
,lerpVector
,shallowCopy
, andjsonCopy
utils- Missing
offsetPosition
andoffsetWorldRotation
property forAnimateTrack
andAssignPathAnimation
- Object method comparison now checks for mod type
- All beatmap v3 and v2 schema attributes is now optional
- Beatmap v3 now purge all zero value attributes on optimized save (new in 1.32 editor)
- This strips all zero attributes from the object resulting in up to 5x smaller size
- Data check now ignores majority of the missing attributes, defaulting to
0
orfalse
- Older Beat Saber version down to 1.20 can still load the beatmap with no issue
- Can be applied for beatmap v2 but must be explicitly enabled with
purgeZeros
attributes inoptimize
- Does not apply to beatmap v1 as it require all attributes to be present
- All default value changed to
0
,false
or first enum value in attributes- Arc multiplier, tail multiplier
- Chain squish, link count
- Event float value
- Obstacle duration, width, height
- Class static
default
should no longer be touched unless you know what you are doing
- Parsing no longer handle sorting
- Moved to class method, sorting is done by default on load
- The Weeknd and Panic 2.0 color scheme now shows white color value
- Utils no longer require namespace
- This should reveal more hidden utilities without the need to import and destructuring
utils
namespace
- This should reveal more hidden utilities without the need to import and destructuring
- Beatmap Info structure changed to better fit original structure
- This also goes for info custom data
- Beatmap optimization tweaked
- Moved sorting responsibility to saving
- Beatmap
addObject
method now always create new instance - Custom data color scheme
a
is now optional instead of omitted - Removed logging from utils, now throws error instead of warn or error
- Clarify
difficultyFromInfo
return type deepCopy
reworked, formerly is nowjsonCopy
- Converter function renamed for clarity
- Color utils renamed for consistency
HsvaToRgba
tohsvaToRgba
RgbaToHsva
torgbaToHsva
interpolateColor
tolerpColor
- And couple others I forgot
- Renamed
translationDistribution
togapDistribution
- Shortened constant
Position#
toPos#
- Data check not picking up
NaN
value - Mapping Extensions precision placement X position being incorrect
- Data check should properly skip error
- Couple of accidental mutation fix from utils
toHexColor
properly normalize the value outside of 0-1 range
- Optimize shouldn't remove info attribute
- Updated to info v2.1.0
- Queen environment & color scheme
- Legacy beatmap v1 (incomplete; contain mixed information)
- Info wrapper class
- Beatmap object class validation
- Tagged log method
- Prefixed with,
t
followed by capital letter, for consistent tagging style print - Non-tagged log will automatically apply
script
tag - Able to customise tag print and untagged string
- Prefixed with,
- Wrapper class now have their own protected attributes instead of using
data
- Unspecified difficulty version will now return base wrapper class instead of version specific
- This means it won't automagically convert v2 map to v3 map when unspecified
- Renamed
slider
andburstSlider
toarc
andchain
respectively- This reduce the confusion between internal and common name
- Schema remained unchanged for obvious reason
- Renamed
fileName
tofilename
for consistency - Renamed couple of functions and constants
- Allow object class constructor to be used (similar to static
create
but as single object) - Allow object class
func
to have any arguments - Changed modded object value method behaviour
- Changed custom data type structure
- Changed type from
Record
toObject
for known constants - Updated converter functions
- Updated Heck stuff
- Logger can now be instantiated
- Small refactor for BPM and NJS class
- Recommended Deno version to 1.34.0+
- Only root-level file can contain platform-specific API
- Copy object/array in class object when copying to prevent accidental referenced mutation
- Missing NE and Chroma check
- Missing wrapper and types export
- Chroma gradient event convert properly
- Possible floating-point error in NJS HJD calculation
- Constants should throw TS error if modified (
environment
,colorScheme
, etc.)
data
in class object (Array
andObject
are never modified and could cause confusing usage)- Prompting in conversion (this should now be handled by script user)
swapPosition
andswapRotation
in class object (seemingly unnecessary utility)Required
object in concrete class (overall less visual noise)- Unused optimize option
- FS utility (now uses standard module)
- Panic 2.0 environment & color scheme
- Missing export for types (@Fernthedev)
- Interactive time condition changed
- Arc is ignored and bomb should no longer be ignored (no idea why this was)
- Moved
track
from NE to Heck - Updated Chroma and NE check on beatmap object
- Dragons 2.0 environment & color scheme
- Wrapper attribute interface separated (this should result in consistent and better developing experience)
- Event box constructor should no longer attempt to fix beat distribution value for step and offset type filter
- Gradient conversion used wrong event class
- Data check can now check for array of primitives
- Converts boost and lane rotation event from basic events to their respective arrays
- Temporary v2 event conversion to v3 event in beatmap v3 parsing
- Updated custom data schema
- Data checks now performed after optimisation
- Difficulty related function now uses wrapper instead of concrete object
- Renamed save option attributes from
optimise
tooptimize
- Data check throwing error for array of primitives
- Fixed optimisation removing required attributes
_lineLayer
and_height
from v2 obstacle (it never existed in the first place)
- The Weeknd and Rock Mixtape environment & color scheme
- Wrapper class/interface
- Write properties instantiation in more readable syntax
- Able to instantiate object from existing class object (copy)
- Mix-and-match is possible but will prioritise wrapper property
- External file interface
- Currently supported
BPM Info
,Cinema
,Chroma
- Currently supported
- Zip extension
- Couple more utilities
- Pseudorandom number generator (global or instanced)
- Vector helpers
- Color from helpers (various of input to return color array)
- Array pick random
- Experimental Deno standard library usage
- Test coverage
- Updated to beatmap v3.2.0
- Structural change
- Custom data type moved to their dedicated folder to separate main and custom schema (main schema uses custom schema for custom data)
- Renamed
basicBeatmapEvents
andcolorBoostBeatmapEvents
tobasicEvents
andcolorBoostEvents
- Beatmap v2 field rename (JSON remains the same)
- Improved function overloading and auto-completion
- Renamed couple of function to be camel/pascal case including acronyms (JS API left untouched)
- Array utilties now uses template
- Obstacle not correctly check for interactive in specific case
- Loose-autocomplete type incorrectly throw error when passed to primitive
- Couple of utils fixed from testing
- Lizzo environment & color scheme
- Beatmap auto-fixer script
- Data and custom data correction patch
- Remove outside playable patch
- Library version
- Updated to beatmap v3.1.0
- v2 Note and v2 Slider
cutDirection
shortened todirection
to match v3 consistency - Disallow both class object and object to be added in the same parameter for difficulty add object (this makes for less confusing autocomplete)
- Updated SPS info
- Convert To V3 script now actually ask for miscellaneous conversion
- Data check option now actually respect option
- Deleted stray
_preciseSpeed
custom data on conversion - Autocomplete no longer includes object class property in add/creation
- JSDoc typo error
- v3 BPM change support to
BeatPerMinute
class - Custom data patching for v2 and v3
- Conversion now keeps unknown custom data
NoteCutAngle
renamed toNoteDirectionAngle
- v2 Waypoints is now optional
- Updated Heck
- Couple of clean-up
- LightMapper default brightness now set to 1
- Object callback no longer warn undefined
- Chroma geometry, material and component
- This contains breaking changes to existing v3 Chroma
- More utilities standard, Chroma, and Noodle Extensions
- LightMapper -> v3 lighting system for v2 light
- EnvironmentGrab -> utility to write environment game object in regex and string form
- Configurable data check
- Checks on save
- Object mirroring now use & change custom data
- Object get position/angle can use & return custom data value
- Object function callback method for more advanced use
- Color function can infer hex string as RGBA color
- Color function can take color object and uses them accordingly
- Depend on use case, this will always convert to RGBA for ease of development
- Loose autocomplete
path
is now calleddirectory
to avoid confusion- Easings is now independent to beatmap
- Easings can be retrieved from
utils
- Easings can be retrieved from
- Beatmap V3 to V2 conversion now converts customData back
- Attempts to fix position for environment track
- Beatmap object create will now always return array
- Types structure changes
- Renamed class
DifficultyData
toDifficulty
- Renamed method
toObject
totoJSON
for JS built-in functionality - All constructor is now protected instead of private
- Negative hue no longer result null value
- Obstacle mirroring now accounts for width
RgbaToHsva
hue returning normalised hue value insteaddirectory
potentially no longer prefix file name instead of going into folderwhere
function does not filter correctly with exclude
- Selector extension
where
function
- v2 event floatValue and v2 obstacle lineLayer & height is now optional
- Class object data is now exposed (not recommended for modification purpose)
- Several changes to extensions
- Example is broken
- Sometimes error would come randomly
- The Second environment and color scheme
- Environment class for Chroma extensions
- Top-level functions use regular function instead of arrow function
- V2 objects use
pos
instead ofline
- Slider create default multiplier from
0.5
to1
and mid anchor to0
- Default options is now nested
- Cleaned up JSDoc
- Bookmark type file somehow ended up in class folder
time
instead oftype
for custom events
- Difficulty file name not being saved
- Selector extension
- Select object at time and between time
- Class object clone method
- Custom data will now always exist in class object context
- Heck settings setter now allow for any valid field
- Several extensions fixed
- File name saved to difficulty class object
- Saving difficulty will prioritise file name from explicit option
filePath
, class object, info, and default value
- Saving difficulty will prioritise file name from explicit option
- Point definitions v2 to v3 conversion
filename
field removed from difficulty list interface due to redundancy (settings
field already provided file name)