[0.75.0] - 2026-08-26
As always, back up your Save. That includes any personal modifications to the Assets folder, Noteskins folder, and the entire Save folder. These folders are usually found in the folder your game is installed.
If you made modifications to Theme files for your custom windows, you will need to save that specific Lua file as well.
MacOS Note
OpenSSL is required. It can be installed with Homebrew:
NOTE: If you don't have Homebrew installed already, follow the instructions from the Homebrew website.
brew install opensslAn even longer and complete list of changes can be viewed here (it's harder to read): https://github.com/etternagame/etterna/blob/master/.changelog/Release_0-75-0.md
Headlines
- The game now has new menu music/sfx provided by MonochromeMedia
- Til' Death main menu/options track - Arrowhead
- Til' Death SelectMusic BGM track - Quiver
- Rebirth main menu/options track - Arrowhead
- Rebirth SelectMusic BGM track - Quiver
- The reason the tracks have the same names is because they are meant to serve roughly the same purpose, with Til' Death being an older genre and Rebirth being a modernized one
- These tracks each took specific inspiration from known songs, but I won't tell you what they are yet. That's part of the fun
- Rebirth SFX completely refreshed
- Til' Death and Rebirth /Sounds/ folders should have simpler ways to globally replace the music as you feel
- The music is on by default, and I've added a toggle to turn off the title music and the selectmusic bgm separately. You can find it near the sound options
- YOUR VOLUME HAS BEEN RESET! BUT I GAVE IT A SANE DEFAULT AT LEAST
- This is not only thanks to the new music, but because I split volume into 3 categories:
- Master Volume controls overall volume, and directly controls the gameplay music volume
- BGM Volume controls the menu music volume only, and is multiplied against Master Volume
- Action Volume controls the volume of things that make noise when you touch buttons, and is multiplied against Master Volume
- This is not only thanks to the new music, but because I split volume into 3 categories:
- Multiplayer Spectating
- In any Multiplayer Lobby, type
/spectate playernameor/spec playernameto enable spectating someone - You can type the command again or with no name to stop spectating
- When you are spectating, you can't control what chart is being played, and when the song starts, your game will freeze for 5 seconds while the other players start their gameplay session
- This has not been extensively tested. It shouldn't crash though. Holds act a little funny
- Right now you can only spectate 1 player at a time. There are plans to make it much more functional
- There's a lot of ways you can break Spectating. Feel free to report them in Github Issues
- This feature should not require additional custom theme work...yet...
- Multiplayer in general has a lot of planned updates coming to it. I ran out of time for this update.
- In any Multiplayer Lobby, type
- Replays can show the offset of taps relative to the notes
- This was a feature I promised for 0.67 oops lol
- NoteSkins can customize a little bit about it
- Controlled by Preference
ReplaysShowOffsetswhich is also present in the menus somewhere
- Vulkan renderer added
- This is an experimental addition, but it shows promise. I get better framerate on it, but it is missing a few minor features and can crash
- To try it out, set VideoRenderers in Preferences.ini to
vulkan
The Rest Of The Changes
- General
- Added a gameplay option called "Hold Releases" which makes Hold notes only judge an OK if you hold the entire thing or release close to the tail of the note
- Announcer support was fixed up a small bit and the Instructions.txt in /Announcers/ should have all the valid calls now
- Mouse cursor hiding works on Linux now
- .gif support (it works like a MovieTexture, so think about it like it's mp4)
- MultiToasty is added to Advanced Options and Rebirth Theme Options
- Discord RPC got updated, which means we might get recognized as a game finally. And eventually maybe we can let you invite people to your multi lobby
- Added a Preference
EnableDiscordand also in Advanced Options to let you disable this completely
- Added a Preference
- F3 debug menu allows holding buttons like the volume one
- F3 debug menu allows rebinding them by modifying metrics.ini
- Audio Visualizers should be more responsive
- NetworkSyncManager and Discord RPC all run on threads separate from the main thread to reduce lag
- max playing sound count moved to 128 instead of 32
- fixed videos on linux
- MinaCalc
- minor 5k changes
- pretty much the main thing that changed here is files with abusable anchors got completely obliterated. too much, actually. we will work it out. enjoy the economic downturn while it lasts, vibrothers
- Til' Death
- 2 new music tracks
- Banners support spritesheet animation
- CDTitles can be double clicked to search for files by that author
- Double click again to unsearch
- Mines are added to the Chord Density Graph as flashing red bars
- Profile tab has a new setting to sort scores by Percent
- ScreenFilter (NoteField BG) is added to Color Config
- Offset Plot in Evaluation allows clicking and dragging a region to see the stats for the region
- Rebirth
- 2 new menu music tracks
- 12 new sfx
- Banners support spritesheet animation
- CDTitles can be clicked once to search for files by that author
- Click again to unsearch
- Mines are added to the Chord Density Graph as flashing red bars
- Profile tab has a new setting to sort scores by Percent
- Audio Visualizer has a new algorithm and look
- quotes
- ScreenSelectMusic elements lazy load in order to improve screen load time
- This might give you huge stutters when pressing tabs instead. Good tradeoff? probably not
- Fixes
- Crash when having ../../../.. in a .sm metadata path
- Crash when seeing video banners caused by GetAverageColor
- Rebirth music wheel speed stuff related to fps issues
- I think the rebirth mac lua lag is fixed no idea
- im genuinely exhausted reading the change list to write this list a second time i give up just scroll to the bottom of the detailed changelog for the fixes
- Misc Theming Changes
- Theme specific Noteskins can utilize the global Noteskin folder found at
/Themes/*/NoteSkins/global/to load a Noteskin for all Games isOver(x)now supports var args likeisOver(x, y, z)where it returns true if mouse is over ANY of the argsisOverAll(...)now exists to support returning true if the mouse is over ALL of the args- Language support for OK/NG
- Metrics
- Added
[MusicWheel]SkipComplexSortingwhich will force the C++ MusicWheel to output an ungrouped sort as fast as it reasonably can always - Added
[Screen]DontRestartMusicIfSamewhich will keep the playing music continuously playing if the track path does not change across screen transitions
- Added
- Lua Hooks
- Added
TEXTUREMAN:RageTextureFromBase64(str)to generate a texture from base64 string. Doesnt work well I think - Added
ActorFrame:AddChild(table)which allows for adding children to ActorFrames at runtime by passing a table, such as one given byLoadActororDef.xxx - Added
TimingData:GetElapsedTimeFromRowNoOffset(int) - Added
TimingData:GetElapsedTimeFromBeatNoOffset(float) - Added
Replay:IsForOnlineScore()- bool for if the replay being handled is from online - Added
Replay:IsForSpectateScore()- bool for if the replay being handled is for a spectate instance - Added
SCOREMAN:SortSSRsByPercent() - Added
SCOREMAN:SortSSRsByPercentForGame() - Added
SOUND:GetMusicPath()to retrieve the currently playing audio track path (in the vfs, not absolute) - Added
Song:HasLua()- just checks to see if a BGChanges or FGChanges contains .lua or .xml - Added
ScreenSelectMusic:PlayLoopMusic()to play the BGM loop in SSM because SSM has a lot of BGM tracks that can play and this is probably the important one or at least it's the one I care about - Added
Steps:GetPreviewMusicPath()to supplement existingSong:GetPreviewMusicPath()to give SSC specific information as necessary - Added
Steps:GetETANER()which outputs the ETANER ... the Estimated Timestamps All Non Empty Rows (a table of such) - Changed
Steps:GetNonEmptyNoteData()to output all notedata types and not just taps - Changed
Steps:GetCDGraphVectors(...)to allow specifying a TapNoteType so you can get NPS for mines or something - Added
ScreenPrompt:GetPromptType()- returns "OK" "YES_NO" or "YES_NO_CANCEL" - Added
ScreenSaveSync:GetSyncChangeTextGlobal() - Added
ScreenSaveSync:GetSyncChangeTextSong() - Added
ScreenSaveSync:IsSyncDataChanged() - Added
ScreenSaveSync:GetSyncChangeGlobalValues()which returns a table of[old, new, delta]offsets - Added
ScreenSaveSync:GetSyncChangeSongValues()which returns a table of[old, new, delta]offsets - Added
SCREENMAN:GetOverlayScreens()so you can access the overlay screens in Lua - Added
DownloadablePackPagination:SetPage(int, func)to move directly to a pack downloader page - Added
Sprite:StopUsingCustomTexCoords()to help with some spritesheet funny business - Added
Sprite:EnableCustomPosCoords()for more spritesheet funny business - Added
Sprite:IsUsingCustomPosCoords()yeah - Added
Sprite:IsUsingCustomTexCoords()same - Added
DownloadablePack:DownloadBanner(func)which will provide the given function a pack banner texture after
- Added
- Messages
StoppedMusicbroadcasts when GameSoundManager stops playing music viaSOUND:StopMusic()PlayingMusicbroadcasts when GameSoundManager starts playing a new trackSpectatorInputUpdateSpectatorHoldUpdateSpectatorMineUpdateSpectatorMissUpdateandSpectatorV2Updateall broadcast when relevant Spectator data comes through in multiplayer
- Theme specific Noteskins can utilize the global Noteskin folder found at
Development
- Linux ARM64 Support
- boost.nowide updated to v11.3.0 standalone
- calc debug stuff moved to fallback scripts
- prefer you use
Steps:GetTimingData()in lua instead ofSong:GetTimingData() - crashpad doesnt need python2 anymore
- Discord RPC is now Discord Social SDK 1.6.12170
- updated to luajit 2.1.rolling 7/16/26
- moved to openssl 3.x (3.5? i dont know this sucks)
- moved to sqlitecpp 3.3.3
- moved to libcurl websockets
- removed websocketpp
- moved to libcurl 8.21.0
- renamed WhereUAtBro to GetTimeFromXXXFast
- removed asio
- removed gles2
- removed some gametools
ok actually im out of time stil writing this and too lazy to go over everything