Runtime and build
- Move all projects to .NET 10 with SDK-style project files and a shared
Directory.Build.props (WIN/LINUX, x86/x64 defines)
- Load managed and unmanaged dependencies from libs/managed and
libs/unmanaged through assembly and native library resolvers
- Compile party modes with Roslyn instead of CodeDom
- Update AppVeyor to the .NET 10 SDK and dotnet test
- Download the FFmpeg and gstreamer runtimes from the dependencies
repository during the build
- Remove the VC++ 2015-2022 runtime check, no dependency needs it anymore
Graphics and windowing
- Replace the Direct3D 9 renderer with Direct3D 11 (Vortice)
- Pace Direct3D 11 frames with a frame latency waitable swap chain
- Move window, input and message boxes to SDL3
- Replace System.Drawing with SkiaSharp and WinForms with SDL3 and a
software renderer
Video and audio
- Replace Acinerella with FFmpeg 8.1.3 (FFmpeg.AutoGen)
- Add hardware accelerated video decoding (D3D11VA, DXVA2, VideoToolbox,
VAAPI, VDPAU) with software fallback
- Convert YUV video frames to RGB on the GPU in Direct3D 11 and OpenGL
- Add the video options HardwareDecoding, GpuColorConversion,
DecoderThreads and VideoDownscaleResolution
- Update OpenAL to OpenTK 4 and NAudio recording to WasapiRecorder
Fixes
- Fix the song preview start and shorten the reporter buttons
- Fix a crash when opening the highscore without a selected song
- Use the options slide highlight in the party mode screens to avoid
brightness flicker on VRR displays
- Disable GameInput in the x86 build, SDL3 crashes in GameInputCreate
on 32-bit systems with the GameInput runtime installed
- Fix a truncation warning in PitchTracker
- A won field pops up and fades into the color of the winning team
- At the end, the winning line pulses while all other fields are dimmed
- The jokers are labeled ("New song", "Replay a field"), so it's clear what they do
- Darker panels behind the team areas and more room between the board and the title
- Long player names no longer reach into the board
Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
* Redesign party mode selection
- All party modes are shown at a glance as tiles with an icon and their name, sorted by their name
- The tiles look and behave like the theme buttons, the details of the selected mode (description, target audience, players, teams, microphones, author and version) are shown below
- Modes that need more microphones than configured are dimmed and can't be started
- Select with the arrow keys or the mouse, the arrow keys also reach the Start and Back buttons, a click on a tile starts it
- More than six modes are split into pages
- Icons for Challenge and Tic-Tac-Toe and a general icon for modes without their own
- Fixes the number of players shown for modes with a fixed number of players
* Highlight Sing and Party in the main menu
- Sing and Party are shown as two large buttons side by side above the other buttons
- Statistics, Profiles, Options and Exit stay in one row at the bottom
- Without a profile the missing profile warning takes the place of Sing and Party, because both are locked then, and looks like the other warnings
* Add Player Select Option
* Add Player Select Option
* Add Player Select Option
* Add Player Select Option
* Theme System Version 9
* Theme System Version 9
* Theme System Version 9
* Add Player Select Option
* Add Player Select Option
* Theme System Version 9
* Theme System Version 9
* Theme System Version 9
* Add Player Select Option
* Translate Output/Languages/en.xml in es
100% translated source file: 'Output/Languages/en.xml'
on 'es'.
* Translate en.xml in es
100% translated source file: 'en.xml'
on 'es'.
* Translate en.xml in es
100% translated source file: 'en.xml'
on 'es'.
* Translate Output/Languages/en.xml in es
100% translated source file: 'Output/Languages/en.xml'
on 'es'.
---------
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
* Translate en.xml in fi
100% translated source file: 'en.xml'
on 'fi'.
* Translate Output/Languages/en.xml in fi
100% translated source file: 'Output/Languages/en.xml'
on 'fi'.
---------
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
* Translate Output/Languages/en.xml in de
100% translated source file: 'Output/Languages/en.xml'
on 'de'.
* Translate en.xml in de
100% translated source file: 'en.xml'
on 'de'.
* Translate en.xml in de
100% translated source file: 'en.xml'
on 'de'.
---------
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
* Translate Output/Languages/en.xml in cs
97% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'cs'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Output/Languages/en.xml in cs
97% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'cs'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Output/Languages/en.xml in cs
97% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'cs'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Output/Languages/en.xml in cs
98% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'cs'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Output/Languages/en.xml in cs
98% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'cs'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Output/Languages/en.xml in cs
98% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'cs'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Output/Languages/en.xml in cs
99% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'cs'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Output/Languages/en.xml in cs
99% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'cs'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Output/Languages/en.xml in cs
100% translated source file: 'Output/Languages/en.xml'
on 'cs'.
* Translate en.xml in cs
100% translated source file: 'en.xml'
on 'cs'.
* Translate en.xml in cs
100% translated source file: 'en.xml'
on 'cs'.
* Translate en.xml in cs
100% translated source file: 'en.xml'
on 'cs'.
---------
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
* Translate en.xml in ru
100% translated source file: 'en.xml'
on 'ru'.
* Translate en.xml in ru
90% of minimum 90% translated source file: 'en.xml'
on 'ru'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate en.xml in ru
93% of minimum 90% translated source file: 'en.xml'
on 'ru'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate en.xml in ru
96% of minimum 90% translated source file: 'en.xml'
on 'ru'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Vocaluxe/Website/locales/en.json in ru
100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'ru'.
* Translate Output/Languages/en.xml in ru
100% translated source file: 'Output/Languages/en.xml'
on 'ru'.
* Translate Output/Languages/en.xml in ru
100% translated source file: 'Output/Languages/en.xml'
on 'ru'.
---------
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
* Translate en.xml in fr
93% of minimum 90% translated source file: 'en.xml'
on 'fr'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate en.xml in fr
93% of minimum 90% translated source file: 'en.xml'
on 'fr'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate en.xml in fr
96% of minimum 90% translated source file: 'en.xml'
on 'fr'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate en.xml in fr
100% translated source file: 'en.xml'
on 'fr'.
* Translate en.xml in fr
100% translated source file: 'en.xml'
on 'fr'.
---------
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
* Translate Vocaluxe/Website/locales/en.json in de
100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'de'.
* Translate en.xml in de
90% of minimum 90% translated source file: 'en.xml'
on 'de'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate en.xml in de
93% of minimum 90% translated source file: 'en.xml'
on 'de'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate en.xml in de
96% of minimum 90% translated source file: 'en.xml'
on 'de'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate en.xml in de
100% translated source file: 'en.xml'
on 'de'.
---------
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
* Add: Transifex file and renamed lang files
* Translate Vocaluxe/Website/locales/en.json in tr
100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'tr'.
* Translate Vocaluxe/Website/locales/en.json in es
100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'es'.
* Rename all language files to match transifex.
* Manual sync of translations
* Another manual sync of translations
* Adjust pr branch name
* Translate Output/Languages/en.xml in pt
97% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'pt'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Output/Languages/en.xml in cs
96% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'cs'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Output/Languages/en.xml in it
100% translated source file: 'Output/Languages/en.xml'
on 'it'.
* Translate Output/Languages/en.xml in ru
100% translated source file: 'Output/Languages/en.xml'
on 'ru'.
* Translate Output/Languages/en.xml in sv
100% translated source file: 'Output/Languages/en.xml'
on 'sv'.
* Translate Output/Languages/en.xml in de
100% translated source file: 'Output/Languages/en.xml'
on 'de'.
* Translate Output/Languages/en.xml in fr
100% translated source file: 'Output/Languages/en.xml'
on 'fr'.
* Translate Vocaluxe/Website/locales/en.json in hu
100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'hu'.
* Translate Vocaluxe/Website/locales/en.json in ru
100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'ru'.
* Fix: Unescape String during xml reading
* Translate Output/Languages/en.xml in ru
100% translated source file: 'Output/Languages/en.xml'
on 'ru'.
* Translate Output/Languages/en.xml in ru
100% translated source file: 'Output/Languages/en.xml'
on 'ru'.
* Translate Output/Languages/en.xml in ru
100% translated source file: 'Output/Languages/en.xml'
on 'ru'.
* Translate Output/Languages/en.xml in ru
100% translated source file: 'Output/Languages/en.xml'
on 'ru'.
* Fix: Seperate handling of unescaping
* Fix: Typo
* Fix: Typo
---------
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>