820 Commits
Author SHA1 Message Date
McSchneidar cf2fa796e2 .NET10 Migration (#946)
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
2026-11-02 08:11:20 +01:00
transifex-integration[bot] 5767914372 Updates for file Output/PartyModes/RuleRoulette/Languages/en.xml (#927)
* Translate en.xml in cs

100% translated source file: 'en.xml'
on 'cs'.

* Translate en.xml in es

100% translated source file: 'en.xml'
on 'es'.

* Translate en.xml in fr

100% translated source file: 'en.xml'
on 'fr'.

* 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'.

* Translate en.xml in fr

100% translated source file: 'en.xml'
on 'fr'.

* Translate en.xml in es

100% translated source file: 'en.xml'
on 'es'.

* Translate en.xml in sv

100% translated source file: 'en.xml'
on 'sv'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-28 13:32:02 +01:00
transifex-integration[bot] 157b173fca Updates for file Output/PartyModes/Challenge/Languages/en.xml (#928)
* Translate en.xml in cs

100% translated source file: 'en.xml'
on 'cs'.

* Translate en.xml in es

100% translated source file: 'en.xml'
on 'es'.

* Translate en.xml in de

100% translated source file: 'en.xml'
on 'de'.

* Translate en.xml in fr

100% translated source file: 'en.xml'
on 'fr'.

* Translate en.xml in de

100% translated source file: 'en.xml'
on 'de'.

* Translate en.xml in fr

100% translated source file: 'en.xml'
on 'fr'.

* Translate en.xml in es

100% translated source file: 'en.xml'
on 'es'.

* Translate en.xml in fr

100% translated source file: 'en.xml'
on 'fr'.

* Translate en.xml in sv

100% translated source file: 'en.xml'
on 'sv'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-28 13:31:41 +01:00
transifex-integration[bot] 2de03520aa Updates for file Output/PartyModes/TicTacToe/Languages/en.xml (#929)
* Translate en.xml in cs

100% translated source file: 'en.xml'
on 'cs'.

* Translate en.xml in es

100% translated source file: 'en.xml'
on 'es'.

* Translate en.xml in de

100% translated source file: 'en.xml'
on 'de'.

* Translate en.xml in fr

100% translated source file: 'en.xml'
on 'fr'.

* Translate en.xml in es

100% translated source file: 'en.xml'
on 'es'.

* Translate en.xml in fr

100% translated source file: 'en.xml'
on 'fr'.

* Translate en.xml in sv

100% translated source file: 'en.xml'
on 'sv'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-28 13:31:24 +01:00
transifex-integration[bot] b2ce2c089c Updates for file Output/PartyModes/Tournament/Languages/en.xml (#936)
* 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 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'.

* Translate en.xml in es

100% translated source file: 'en.xml'
on 'es'.

* Translate en.xml in fr

100% translated source file: 'en.xml'
on 'fr'.

* Translate en.xml in sv

100% translated source file: 'en.xml'
on 'sv'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-28 13:31:08 +01:00
transifex-integration[bot] fe90f86941 Updates for file Output/PartyModes/PartnerSwap/Languages/en.xml (#937)
* Translate en.xml in es

100% translated source file: 'en.xml'
on 'es'.

* Translate en.xml in fr

100% translated source file: 'en.xml'
on 'fr'.

* Translate en.xml in es

100% translated source file: 'en.xml'
on 'es'.

* Translate en.xml in fr

100% translated source file: 'en.xml'
on 'fr'.

* Translate en.xml in sv

100% translated source file: 'en.xml'
on 'sv'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-28 13:30:49 +01:00
transifex-integration[bot] 67d56fdffe Updates for file Output/PartyModes/TeamSurvival/Languages/en.xml (#938)
* Translate en.xml in es

100% translated source file: 'en.xml'
on 'es'.

* Translate en.xml in de

100% translated source file: 'en.xml'
on 'de'.

* 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'.

* Translate en.xml in es

100% translated source file: 'en.xml'
on 'es'.

* Translate en.xml in fr

100% translated source file: 'en.xml'
on 'fr'.

* Translate en.xml in sv

100% translated source file: 'en.xml'
on 'sv'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-28 13:30:33 +01:00
transifex-integration[bot] 22ad04ec6c Updates for file Output/Languages/en.xml (#935)
* Translate Output/Languages/en.xml in de

100% translated source file: 'Output/Languages/en.xml'
on 'de'.

* Translate Output/Languages/en.xml in es

100% translated source file: 'Output/Languages/en.xml'
on 'es'.

* Translate Output/Languages/en.xml in fr

100% translated source file: 'Output/Languages/en.xml'
on 'fr'.

* 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 Output/Languages/en.xml in es

100% translated source file: 'Output/Languages/en.xml'
on 'es'.

* Translate Output/Languages/en.xml in cs

100% translated source file: 'Output/Languages/en.xml'
on 'cs'.

* Translate Output/Languages/en.xml in cs

100% translated source file: 'Output/Languages/en.xml'
on 'cs'.

* Translate Output/Languages/en.xml in de

100% translated source file: 'Output/Languages/en.xml'
on 'de'.

* Translate Output/Languages/en.xml in fr

99% of minimum 90% translated source file: 'Output/Languages/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 Output/Languages/en.xml in es

100% translated source file: 'Output/Languages/en.xml'
on 'es'.

* Translate Output/Languages/en.xml in fr

100% translated source file: 'Output/Languages/en.xml'
on 'fr'.

* Translate Output/Languages/en.xml in fr

100% translated source file: 'Output/Languages/en.xml'
on 'fr'.

* Translate Output/Languages/en.xml in sv

100% translated source file: 'Output/Languages/en.xml'
on 'sv'.

* Translate Output/Languages/en.xml in sv

100% translated source file: 'Output/Languages/en.xml'
on 'sv'.

* Translate Output/Languages/en.xml in sv

100% translated source file: 'Output/Languages/en.xml'
on 'sv'.

* Translate Output/Languages/en.xml in sv

100% translated source file: 'Output/Languages/en.xml'
on 'sv'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-28 13:29:59 +01:00
McSchneidarandFlorian Ostertag 4ee6689ff4 Seamless audio loops and own credits music (#945)
Loops
- Looping is now done by the playback backends instead of restarting
  the stream with Stop/Play. Loop can be toggled at runtime (SetLoop in
  ISound/IPlayback/IAudioStream), so the repeat button keeps working.
- GStreamer: gapless loops via playbin's about-to-finish signal.
- PortAudio/OpenAL: the decoder is reopened at the end of the file
  (Acinerella's seek does not reset FFmpeg after EOF) while the buffered
  data keeps playing, so the loop has no gap. The reported position wraps
  correctly.

Credits screen
- New event music player in CBackgroundMusic that replaces the current
  background music and resumes it afterwards.
- The credits screen loops Sounds/CreditsMusic.mp3
  ("Atmosphere Calm Background" by lvymusic, Pixabay Content License).
- As the credits screen was touched anyway, its content was updated as
  well.

Fixes for PortAudio/OpenAL playback found on the way
- Acinerella delivers 32 bit float samples for mp3, so every file was
  rejected with "Unsupported BitDepth". Float samples are converted to
  16 bit now.
- Acinerella reports a missing frame (EAGAIN) like the end of the file,
  so decoding is retried a few times before treating it as the end.
- OpenAL stopped after half a second because the decoder thread was
  never woken up to refill its buffer. A source that ran out of data is
  restarted as well.

Part of #677

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-27 09:43:02 +01:00
McSchneidarandFlorian Ostertag 336d08040e New Webserver and WebApp (#942)
* Replace the WCF webserver with an ASP.NET Core webserver (VocaluxeWeb)

- New project VocaluxeWeb: ASP.NET Core 2.3 (Kestrel) on .NET Framework 4.8.1, HTTP or HTTPS
  with a self-signed certificate, REST API (/api/v1) with Swagger, live events (Server-Sent Events)
- Access to the game only through IVocaluxeRemote; requests run on the main thread once per frame
- Sessions with roles (guest, player, admin) and configurable permissions, PINs hashed with PBKDF2
- Queue as a playlist with requesters and singers, fair order (one song per person and round)
- Admin: settings, server status, logged-in devices, activate/deactivate and delete profiles
- Profile pictures: own photo or one of the Vocaluxe avatars
- Game: WebApp queue screen (song options, playlist group) to start the next song with the chosen
  singers, return to it after singing, warning when the webserver is off, remote keyboard
- Old WCF server, WebserverInitalConfig and URL reservations removed; libraries moved to libs/managed
- Unit tests for PIN hashing, settings and permissions, queue order and device names
- AppVeyor: Visual Studio 2022 image and Node.js 24 (the build compiles the WebApp)
- Documentation in VocaluxeWeb/README.md

* New WebApp (Vue 3, TypeScript, Vite) replacing the old jQuery Mobile website

- Login with profile and PIN, create profiles
- Songs with search, filters, sorting and 30 second previews
- Queue: add songs with game mode, audio and singers, edit, reorder, start in the game
- Playlists: create, edit, add to the queue
- Now playing with live updates, remote control and keyboard
- Players: own profile with picture (photo or Vocaluxe avatar), roles for admins
- Admin settings: permissions, server status, devices, profiles
- Help page, responsive layout for phones, tablets and desktops, light and dark mode
- Texts in WebApp/src/locales/en.json, translated with Transifex
- Old website and PhoneGap config removed

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-26 05:40:11 +01:00
McSchneidar 73a24ad930 Vortice (#940) 2026-10-22 19:41:30 +02:00
McSchneidarandFlorian Ostertag 2cdd30c6fc Small improvements for 3 screens (#934)
* Improve profile and player selection screens

- Ask before deleting a profile, Delete only removes a character while editing the name
- Ask to save or discard unsaved profile changes when leaving the profile screen
- Restore the previous name with Escape and prevent empty profile names
- Stop the webcam when leaving the profile screen and discard snapshots on avatar change
- Show inactive profiles dimmed in the profile screen
- Play the missing mic/profile warning each time the player selection is shown
- Fix crash when clicking a profile after removing a player with Delete in fast selection
- Keep the duet part selection when profiles are reloaded
- Only save the player number when it has changed

* Use party mode selection look in statistics screens

- Tiles and selection use the ButtonTile skin like the party mode selection, the selected tile uses the selection color of the skin
- The detail list uses the CoverTextBackground skin, inner cards and row stripes the ButtonTile skin
- More space between the title and the columns of the best list
- Show the date in the recently sung list left aligned inside the list

* Changelog

* Improve sing screen and redesign pause menu

- Fix jumping to the old pause position after restarting or skipping a song in vocals mode
- Keep name and avatar hidden for players without a valid profile
- Show the placeholder avatar for profiles without avatar image
- Hide player information and rating popups during the start countdown
- Fix pause select slides not being shown or hidden
- Show "no more songs" only when Ctrl+S is pressed
- Select "Continue" when opening the pause menu with Escape
- Darken the game behind the pause menu
- Pause buttons as vertical list with icons, hidden buttons leave no gaps (visible buttons are placed in the slots of all pause buttons)
- New PauseButton skin with rounded corners for wide buttons, used for the pause buttons and the vocals volume selection
- Larger pause title centered above the pause panels
- Info panel with cover, title, artist, song progress and player scores
- Vocals volume selection with icon and centered caption in the full width of the info panel, showing five values
- Pause panels and icons are animated together with the pause buttons

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-21 12:05:18 +02:00
McSchneidarandFlorian Ostertag c8213bdcda Improve score screen (#933)
- Update score and progress bar visibility when changing rounds
- Count karaoke songs as played
- Highlight the winner with a pulsing animation
- Add clickable arrows to change the round
- Reveal the rating after the progress bar animation
- Show player names in player colors and the song cover next to the title
- Stop score sounds when the screen is closed
- Remove unused ScreenSettingAnimationDirection from the theme
- Show one row per player in player order (two columns from 4 players)
- Split the points bar into notes, golden notes and line bonus with a legend
- Add ScoreTile and ScoreTileSmall skins for the player rows

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-21 11:02:23 +02:00
McSchneidarandFlorian Ostertag 74653ab977 Improve song selection screen (#932)
* Redesign song selection screen

* Fix SonarCloud issues

* Add TileCaption to SConfig test file

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-21 10:25:40 +02:00
McSchneidarandFlorian Ostertag 6601f41aac Redesign option screens (#931)
* Redesign and improve option screens

- Open the options directly from the main menu with the focus on the navigation, all option screens share a navigation with all categories, song folders and credits
- Navigation and settings use rounded backgrounds like the party mode selection, the current category and setting are highlighted with the selection color of the skin
- Categories can be clicked or switched with Tab, Escape moves the focus to the navigation and leaves the options from there, choosing a category moves the focus to its first setting
- Place the action buttons (delay test, adjust screen, server address, add folder) and the webcam preview inside the settings background
- Center the restart and microphone warnings below the settings background
- Move song folder management to its own screen with a list of all folders, add and remove buttons, a scrollbar and a restart warning
- Add the tile caption option to the game options (only selectable when the song menu is set to tiles)
- Remove the old options selection screen (ScreenOptions)
- Fix configured song folders being ignored when the first entry of the config is empty
- Show the folder dialog in front of the game window
- Fix background music source being overwritten by the karaoke effect setting
- Keep the webcam configuration when no webcam is connected
- Warn when several players are assigned to the same record channel
- Show a warning when no microphone is found
- Remove cover sizes 32 and 64 and keep unknown cover sizes until changed
- Play warning sounds again each time an option screen is shown
- Ignore key pressed events in graphics and server options
- Keep the background music volume in sync in the sound options

* Fix SonarCloud issues

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-21 09:12:04 +02:00
McSchneidar 522003a25f Add Jukebox Mode (#930)
* Add jukebox mode

Songs can now be played without singing, e.g. as a break filler at parties.

- New Jukebox button in the main menu next to Sing and Party, locked without a profile like both of them
- Choose all songs, a category or a playlist, random or in order, and optionally only a part of each song (medley part, 30, 60 or 90 seconds)
- Video in full screen, lyrics without notes and a short song info whenever a new song starts
- Control bar with previous, pause, next, skip intro, audio mode (normal or instrumental), shuffle, repeat, lyrics on/off, queue and "Sing now"
- Queue with search: Enter puts a song next, Enter again plays it right away, songs can also be removed and reordered
- The queue adapts its size to the free space above the lyrics or the control bar
- Control bar and queue fade out after a few seconds without input and come back with the next key press or mouse move
- Works with keyboard, mouse and gamepad
- Smooth transition between songs, the next song is loaded in advance
- "Sing now" starts the current song with the player selection and returns to the jukebox afterwards
- The logo in the main menu is now centered
- New LyricsIcon and QueueRow textures in all Vocaluxe 2024 skins

* Fix SonarCloud issues
2026-10-21 08:49:50 +02:00
transifex-integration[bot] bc4d2cf169 Translate Output/Languages/en.xml in cs (#926)
100% translated source file: 'Output/Languages/en.xml'
on 'cs'.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-19 10:33:36 +02:00
transifex-integration[bot] b2726b6385 Updates for file Output/PartyModes/PartnerSwap/Languages/en.xml (#924)
* 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>
2026-10-19 10:33:31 +02:00
transifex-integration[bot] b0641e3a38 Updates for file Output/PartyModes/TeamSurvival/Languages/en.xml (#923)
* 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>
2026-10-19 10:32:54 +02:00
transifex-integration[bot] 1380b9696f Translate en.xml in cs (#925)
100% translated source file: 'en.xml'
on 'cs'.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-19 10:32:42 +02:00
transifex-integration[bot] e8a915e20a Translate en.xml in cs (#922)
100% translated source file: 'en.xml'
on 'cs'.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-18 15:26:09 +02:00
McSchneidarandFlorian Ostertag 944022f30b Add knockout tournament party mode (#913)
A new party mode for 3 to 16 players who sing against each other in one-on-one duels. Whoever scores more points moves on, the loser is out, until only the champion is left.

- The bracket is shown mirrored: both halves lead towards the final in the center, where the champion is crowned
- Players are drawn randomly; if the number of players doesn't fill the bracket, some players get a bye in the first round
- Songs are picked randomly from all songs, a category or a playlist, sung as normal, short or medley version, and no song is played twice
- Each player has up to 3 jokers for the whole tournament to skip a song they don't like
- On a tie, the duel is sung again
- The winner of each duel visibly moves on to the next round, and the champion is celebrated at the end

Also fixes "Select random" in the player selection of party modes, which only filled half of the slots.

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-18 10:36:19 +02:00
transifex-integration[bot] b4d8f7ef8f Translate en.xml in de (#918)
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

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-18 09:32:26 +02:00
McSchneidarandFlorian Ostertag d61f90e6fc Add rule roulette party mode (#916)
A new party mode for 2 to 12 players that only needs 2 microphones. Players sing duels against each other, and before every duel a wheel decides the rule for this round. Every player sings equally often, and the player with the most points wins.

- 20 rules: from short songs, medleys, double packs, duets and free song choice to rules that change what counts (golden notes, line bonus, target score, fewer points win, teamwork) or how many points there are (double points, all or nothing, point steal, lead counts, underdog bonus, jokers)
- The rules on the wheel are drawn randomly for each game, or chosen manually: every rule can be set to always, random or never
- Every rule on the wheel comes up once before any rule comes up again; rules already used are dimmed
- Rules that need special songs are only used if the song selection has enough of them
- The wheel spins with a running light that slows down, and the winner is celebrated at the end

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-18 08:30:04 +02:00
McSchneidarandFlorian Ostertag 3bdf22c870 New party mode: Partner Swap (#915)
* Add partner swap party mode

A new party mode for 3 to 12 players that only needs 2 microphones. Everyone plays for themselves, but always sings together with a partner. Both singers get the score of the pair, and the partners change every round.

- In each round every player sings once, with a partner they haven't sung with yet; with an odd number of players someone takes a break, in turns
- Ranking by the average score per song, so breaks are no disadvantage
- Optional harmony bonus of 500 points when both singers are no more than 500 points apart
- Duet songs are sung with both voices; duets can be mixed in, used exclusively or left out
- Up to 3 jokers per player to skip a song
- The best pair is shown all the time, and the winner and the best pair of the night are celebrated at the end

* Rename the harmony bonus points constant to avoid shadowing

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-18 08:20:24 +02:00
McSchneidarandFlorian Ostertag 3810f75e04 New party mode: Team Survival (#914)
* Add team survival party mode

A new party mode for two teams that only needs 2 microphones. In every duel one player of each team sings against one of the other team. Whoever loses a duel loses a heart, players without hearts are out, and the team whose players are all out loses.

- Every player sings once per round before anyone sings again, the duels are drawn randomly
- Teams of different sizes are possible, in the smaller team some players sing a second time per round
- Hearts can be the same for everyone or set per player, to balance uneven teams or strong and weak singers
- Up to 3 jokers per player to skip a song
- On a tie, the duel is sung again
- A lost heart is animated, and the winning team is celebrated at the end

* Trigger CI rebuild

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-18 07:49:44 +02:00
McSchneidarandFlorian Ostertag 5e449c7b01 Improve tic-tac-toe party mode (#912)
- 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>
2026-10-18 06:18:20 +02:00
McSchneidarandFlorian Ostertag b4c29e1b55 Improve challenge party mode (#911)
- Instead of a number of rounds, you now choose how many songs each player sings
- New option to remember sung songs, so a new challenge doesn't repeat songs from the previous ones
- Up to 16 players
- The number of jokers and the joker refill setting are kept instead of being reset every time
- The overview shows each player's avatar, the top three in gold, silver and bronze and highlights the leader
- The winner of each round is highlighted in the round list
- The winner is celebrated at the end with avatar, a pulsing gold name and stars

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-17 21:18:49 +02:00
McSchneidar aac5253862 Redesign Party Mode Selection Screen and Main Screen (#917)
* 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
2026-10-17 20:58:37 +02:00
McSchneidar e665e31f4a Improved animations (#907)
* Smoother countdown and new menu and in-game animations

- Countdown digits pop in and fade out each second, with a ring of dots showing the remaining part of the second
- Medley countdown uses a smoothed timer and no longer stutters
- Rating popups scale in from below and drift upwards while fading out
- Player scores pulse briefly at the end of a line
- Pause menu fades and scales in and out
- Buttons and select slides pulse briefly when they get selected
- Shared easing functions and a draw transform for animations

* Retrigger CI
2026-10-17 12:39:18 +02:00
McSchneidarandFlorian Ostertag 602417e773 Add statistics screens (#910)
* Add statistics screens

- New statistics dashboard with four tiles: overview, recently sung, best list per difficulty and players
- Each tile opens a detail screen with longer lists, filters (left/right) and scrolling
- Detail lists show ranks for places 1-3, avatars, bars and alternating row backgrounds
- Players can be ranked by most songs or by best average
- Overview details: most sung songs, genres, languages and songs never sung
- Navigation help at the bottom of both screens
- New Statistics button in the main menu
- English and German texts

* Address code analysis findings in statistics screens

* Retrigger CI

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-17 05:17:36 +02:00
McSchneidarandFlorian Ostertag d03224f29b Audio mode for each playlist entry (#909)
- Playlist entries get a second select slide for the audio mode (normal, instrumental, vocals, karaoke)
- The slide is only shown if the song has an instrumental file, otherwise normal is used
- The audio mode is saved in the playlist file and used for each round
- Sing, score and highscore screens use the audio mode of the current round
- Song options select the audio mode by mode instead of position
- ScreenSong theme version 15

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-17 04:46:28 +02:00
McSchneidar 61b2677f16 Redesign highscore screen (#908)
- Places 1-3 are shown on a podium with profile avatars and a crown for the winner
- Players without an avatar get a placeholder silhouette (new skin texture NoAvatar)
- Places 4-10 are listed below with a score bar for each entry
- The podium only appears once there is at least one highscore
- New entries are shown in gold with a slight pulse and gold sparkles
2026-10-17 04:23:07 +02:00
transifex-integration[bot] d5e5f3fbeb Updates for project Vocaluxe and language fi (#900)
* Translate Output/Languages/en.xml in fi

100% translated source file: 'Output/Languages/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>
2026-10-12 09:50:05 +02:00
transifex-integration[bot]andFlorian Ostertag f5583a75a1 Updates for project Vocaluxe and language cs (#886)
* 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

100% translated source file: 'Output/Languages/en.xml'
on 'cs'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-08-24 23:53:44 +02:00
McSchneidar b822281e04 Fix: Default profiles are not recognized (#894)
* Change 'ID' to 'Id'

* Change 'ID' to 'Id'

* Change 'ID' to 'Id'
2026-08-24 19:07:09 +02:00
transifex-integration[bot]andFlorian Ostertag b9b0f7c8df Updates for project Vocaluxe and language fi (#850)
* Translate Output/Languages/en.xml in fi

99% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'fi'.

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 fi

96% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'fi'.

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 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>
Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-05-29 08:24:30 +02:00
transifex-integration[bot] d65bc38f6e Updates for project Vocaluxe and language sv (#852)
* Translate Output/Languages/en.xml in sv

94% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'sv'.

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 sv

92% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'sv'.

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 sv

100% translated source file: 'Output/Languages/en.xml'
on 'sv'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-05-29 07:56:33 +02:00
transifex-integration[bot] e3064c63a1 Updates for project Vocaluxe and language de (#872)
* Translate Vocaluxe/Website/locales/en.json in de

100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'de'.

* Translate Output/Languages/en.xml in de

100% translated source file: 'Output/Languages/en.xml'
on 'de'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-05-04 06:14:19 +02:00
McSchneidar 48ffe4ccd5 Add check for VC++ 2015–2022 Redistributable (#871)
* Add check for VC++ 2015-2022

* Remove Windows Vista

* Remove Windows Vista

* Add check for VC++ 2015-2022

* Add check for VC++ 2015-2022
2026-05-02 06:17:00 +02:00
transifex-integration[bot] 09031fe79b Updates for project Vocaluxe and language es (#869)
* Translate Output/Languages/en.xml in es

96% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'es'.

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 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>
2026-04-27 06:31:18 +02:00
transifex-integration[bot] 53839df8a5 Updates for project Vocaluxe and language fr (#867)
* Translate Output/Languages/en.xml in fr

96% of minimum 90% translated source file: 'Output/Languages/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 Output/Languages/en.xml in fr

100% translated source file: 'Output/Languages/en.xml'
on 'fr'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-04-27 06:31:04 +02:00
transifex-integration[bot] 677362642a Updates for project Vocaluxe and language de (#868)
* Translate Output/Languages/en.xml in de

96% of minimum 90% translated source file: 'Output/Languages/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 Output/Languages/en.xml in de

100% translated source file: 'Output/Languages/en.xml'
on 'de'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-04-27 06:30:51 +02:00
Edi316 5af73e8c00 Expand Options Screen (#856)
* Remove Graphics Options (new screen)

* Remove Graphics Options (new screen)

* Remove Graphics Options (new screen)

* Remove Graphics Options (new screen)

* Screen Version 4

* Screen Version 1

* Create Screen

* Create Screen

* Create Screen

* Add Graphics Screen

* Add Graphics

* Add Graphics

* Add Graphics

* Add Graphics

* Remove Graphics Options (new screen)

* Remove Graphics Options (new screen)

* Remove Graphics Options (new screen)

* Create Screen

* Add Graphics

* Add OptionsGraphics Screen

* Remove Graphics Options (new screen)

* Add OptionsServer

* Add creenOptionsServer

* Add ScreenOptionsServer

* Create Screen

* Add Server options

* Add Server options

* Add Screen

* Version 1

* Add Server Options

* Add Server Options

* Add Server Options

* Add Screen

* Add Screen

* Add Screen

* Add Server Options

* Add Screen

* Remove Graphics Options (new screen)

* Add Screen

* Add Screen

* Add Server Options

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Server options

* Add SongFolder

* Add Song Folder

* Update Options

* Add Song Folder

* Remove Song Folder & Server Buttons

* Remove Song Folder & Server Buttons

* Version 6

* Remove Song Folder & Server Buttons

* Add Song Folder

* Add Song Folder

* Add Song Folder

* Add Song Folder

* Add Song Folder

* Add Song Folder

* Add Song Folder

* Version 4

* Remove Song Folder & Server Buttons

* Add Song Folder

* Add Song Folder

* Create Screen

* Create Screen

* Create Screen
2026-04-26 20:50:43 +02:00
Edi316 76d26239bd Grid overview for profile screen (#858)
* Add Profile Grid

* Add Profile Grid

* Add Profile Grid

* Add Profile Grid

* Version 4

* Add Profile Grid

* Add Profile Grid

* Add Profile Grid

* Fix Out of Bounds Index & Player Selector Cursor

* Add Profile Grid

* Fix Out of Bounds Index & Player Selector Cursor
2026-04-26 20:50:15 +02:00
Edi316 80274d1a04 Add Windows 11 to Readme (#857)
* Add Windows 11

* Add Windows 11
2026-03-28 16:33:10 +01:00
Edi316 8caeedd5d6 Reposition CategoryText (#854) 2026-03-26 09:48:54 +01:00
transifex-integration[bot] ba3f362519 Updates for project Vocaluxe and language fr (#853)
* Translate Output/Languages/en.xml in fr

99% of minimum 90% translated source file: 'Output/Languages/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 Output/Languages/en.xml in fr

100% translated source file: 'Output/Languages/en.xml'
on 'fr'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-03-23 20:10:33 +01:00
transifex-integration[bot] bfaffc52cc Updates for project Vocaluxe and language es (#849)
* Translate Output/Languages/en.xml in es

99% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'es'.

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 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>
2026-03-23 20:10:17 +01:00
transifex-integration[bot] c389449c18 Updates for project Vocaluxe and language de (#851)
* Translate Output/Languages/en.xml in de

99% of minimum 90% translated source file: 'Output/Languages/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 Output/Languages/en.xml in de

100% translated source file: 'Output/Languages/en.xml'
on 'de'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-03-22 06:15:47 +01:00