Version 2.4

From Viki
Jump to navigation Jump to search
Release dateTo be determined
Minimum SDL versionSDL 2.24.0
Shipped SDL versionTo be determined

Version 2.4 is a major update to VVVVVV, starting development on August 31st, 2021. It is currently in development and is scheduled to have localization and input rebinding.




Custom Levels


  • destroy(moving) and destroy(disappear) were added.
    • destroy(moving) destroys moving platforms (instead of being bugged and only stopping them and making them invisible, like destroy(platforms)).
    • destroy(disappear) specifically destroys disappearing platforms.
  • setactivitycolour() and setactivitytext were added, allowing users to change the color and text of the next activity zone which appears.
    • The text which setactivitytext uses is the text on the next line.
  • changerespawncolour() was added.
    • This command changes the color the player respawns with upon death.


  • Save file migration from 2.0 data to 2.2 data was removed.
  • WebAssembly is now a supported build target.
  • __unix__ is used to detect Unix-like platforms, meaning many platforms don't need any changes to VVVVVV to work.
  • The following debug statements were added:
    • Values of the xoshiro RNG generator.
    • Achievements being unlocked (even if not already unlocked).
  • The CMake config option -DREMOVE_ABSOLUTE_PATHS was added to remove potentially-sensitive absolute paths from the compiled binary, if supported by the compiler. It was enabled by default.


  • The -version command-line argument was added to print the version number of the executable, as well as the hash, date, and branch of the commit it was built from if the executable has that information.
  • The window title will display the branch name the game was built from in brackets, and the branch name will also be displayed on the title screen, if the executable has that information.




  • Misa Kai's name was moved from the "super" GitHub contributors list to the C++ developers list.
  • All time strings were made more uniform. Centiseconds are now always separated by a period, and the first unit of the timestamp always no longer has a leading zero.
  • Launching the game in Big Picture or on the Steam Deck will now force the game to fullscreen, with windowing options removed from the graphics menu.
  • The game was made to default to integer scaling mode when launched for the first time.
  • The selector characters around the names of scripts in the script editor were made to be the same as the selector characters on the title screen.

Custom Levels

  • assets were removed due to disuse.
  • Custom level zips were made more forgiving. They no longer require level names to be the same name as the zip, and can have multiple level files in one zip sharing assets.


  • When the game is attempting to convert a string to a color (ex. changeplayercolour), it now attempts to treat it like a numerical color ID if the string cannot be converted.
  • The 50-line limit on the amount of lines say/reply can take in was removed.


  • Loading music tracks from separate audio files was added. If neither vvvvvvmusic.vvv nor mmmmmm.vvv exist, the game will load music from the music/ folder.
  • Logging was completely overhauled.
    • Output was made prefixed with [INFO], [WARN], [ERROR], or [DEBUG], including bold and colors (if available).
    • All [WARN] and [ERROR] logs were made to properly go to STDERR, instead of STDOUT.
    • [DEBUG] logs were disabled by default.
  • Command-line options were added to customize logging output:
    • -nooutput disables output entirely.
    • -forcecolor or -forcecolour forces colors to be on.
    • -nocolor or -nocolour forces colors to be off.
    • -debug enables debug logs.
    • -noinfo disables info logs.
    • -nowarn disables warning logs.
    • -noerror disables error logs.
  • The command-line option -console was added, for Windows systems only, to spawn a console window that will capture all console output of the game.
  • Output of loading/saving XML files was streamlined and was made to print TinyXML-2's error output in case of an error.
  • The minimum SDL version was upgraded to 2.24.0.
  • The game's audio system was migrated from SDL_mixer to FAudio.
    • This minimizes the number of libraries ("DLLs" on Windows) needed to run the game (in officially shipped builds).
    • Users have reported that the audio quality is no longer crushed when played through certain speakers.
  • Upon startup, the game will only create the window after all assets have been successfully loaded (and if using command-line playtesting, after STDIN has been closed). In case of an error (like an invalid playtesting level name provided), then the window won't be created at all.
    • This has enabled Ved, starting from 1.10.0, to "pre-load" the game in the background during the screen to choose the playtesting starting point.


  • The level folder path in the levels menu was made to be hidden behind a "show level folder path" menu option. The option warns the user they may leak sensitive information if they are streaming.
  • On Windows, the game no longer needs users to install Visual C++ redistributables in order to run it.
  • The default window size if no settings file is present is now 640 by 480 instead of 320 by 240.



  • Spikes are no longer considered to be solid by moving platforms and entities if invincibility mode is enabled.
  • A bug was fixed where the post-game teleport animation back to the ship from the map menu could be interrupted in various different ways.
  • A bug was fixed where the player was able to flip in mid-air when loading in to a level if they exited to the menu while standing on a surface (along with other state that persisted).
  • A bug was fixed where playing through No Death Mode (and never going to the options menu) would also give you the Flip Mode trophy.


The rare glitchy tileset that was fixed.
  • While nearly unnoticeable to the naked eye, the colors used by the Time Trial trophies in the Secret Lab were mistakenly using BGR format instead of RGB, which was fixed.
  • A rare chance where a glitchy tileset would be drawn during finalstretch was fixed.
  • The name of the author of Vertex Vortex was updated.

Custom Levels

  • A bug was fixed where levelstats.vvv could copy-paste all its entries over and over if you selected the "play a level" option multiple times and then went and completed a level.
  • A bug was fixed where using STDIN playtesting (e.g. playtesting a level within Ved) and then completing it would write a special/stdin.vvvvvv entry to the levelstats.vvv file.
  • A bug was fixed where the map screen could be brought up during in-editor playtesting if the player pressed ENTER on a terminal while dying and having the interact key set to ENTER.
  • The minimap displayed on the gamemode(teleporter) screen was changed to use the custom level minimap if applicable.
  • Trinkets that exist out of bounds were made to no longer be drawn on the minimap.


  • Script names containing spaces or capitals were made possible to be jumped to via iftrinkets() or similar.


  • Duplicate player entities were made to have the same momentum as the true player entity.
  • The workaround used to make the VSync toggle work was fixed, making it more reliable on some systems that might have had problems with it previously.
  • The game now checks that VVVVVV.png is loaded and decoded properly before dereferencing, fixing a potential source of crashes.


  • The game learned to not explicitly write unlock.vvv/settings.vvv if it hadn't attempted to load them yet, preventing overwriting perfectly good save data. Previously, this was handled implicitly and was still theoretically possible in a number of cases involving the game aborting upon startup.


This version received a localization overhaul, adding support for the following languages:

A language menu select appears on first launch if you've never selected a language before. This menu is also accessible from the options menu.

Each language is stored in a folder named after its two-letter code (e.g. en for English) in a new lang/ folder. Each folder contains the following:

  • meta.xml: Contains information about the translation.
  • strings.xml: Contains general strings for the interface and some parts of the game.
  • strings_plural.xml: Contains strings with plural forms.
  • numbers.xml: Contains all numbers from 0 to 100 written out in word form.
  • cutscenes.xml: Contains nearly all cutscenes that appear in the main game.
  • roomnames.xml: Contains nearly all room names that appear in the main game.
  • roomnames_special.xml: Contains special names, such as area names and glitch names.

The following command-line arguments were added relating to localization:

  • -langdir sets the language directory to the given directory.
  • -fontsdir sets the fonts directory to the given directory.
  • -translator enables the translator menu if not already enabled (see below).

The following gamestates were added, all used in the translator 'explore game' mode:

  • 3090: Returns to the main menu.
  • 3091: Waits 60 frames before proceeding to the next state.
  • 3092: Returns to the main menu.

The following script commands (both internal and simplified) were added:

  • iflang: Jump to script if the current game language is a certain language.
  • loadtext: In custom levels, load the given language.
  • textcase: Set the text case for the following text box.

TODO add screenshot of language screen (and other things) when release is finalized

Translator menu

A menu for translator authors and translation maintenance was added. The translator menu only appears on the main menu and is accessible if any of the following are true:

  • The -translator command-line argument is used.
  • The lang/ folder is not next to, the game is running somewhere inside a folder named desktop_version/, and a lang/ folder is found inside desktop_version/. This usually corresponds with running the game from a source code environment (e.g. doing development work).
  • ALWAYS_SHOW_TRANSLATOR_MENU is defined during compilation.

The menu also contains the following options:

  • A menu to sync language files with any new added English strings.
  • Room name translator mode (see below).
  • Previews of every text box in every cutscene, as well as every menu.
  • Check (roughly) if any string overflows a limit.
  • Open the language folder.
  • Statistics counting any untranslated strings.

Room name translator mode

Room name translator mode is accessible from the translator menu. It enables viewing and editing room names and room name explanations while in-game.

  • Pressing I toggles invincibility. If enabled during a time trial, the time trial is sabotaged by adding an hour to the time and adding 100 deaths.
  • Pressing Tab switches between playing and editing.
  • In editing mode, pressing E/Enter edits the room name or explanation.
  • Ctrl+E switches to explanation mode.
  • Ctrl+F1 shows the help.

There is also a separate 'explore game' menu that lets the user quickly travel to any of the following areas:

  • Space Station 1
  • Laboratory
  • The Tower
  • Space Station 2
  • The Warp Zone
  • Intermission 1
  • Intermission 2
  • The Final Level

Beating the area returns the player to the menu.