1
0
Fork 0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-12-22 09:39:43 +01:00
VVVVVV/desktop_version
Dav999 abf12632bb Load plain font.png beyond U+007F
VVVVVV 2.2 only supported displaying characters 00-7F with its font
system. VVVVVV 2.3 added support for unicode, by supplying a font.txt
with all the characters that are in the font image. But 2.3 made
another change that I didn't immediately realize, even after reading
the code: if font.txt is not present, then the font is not assumed to
have _only_ 00-7F, but _all_ of unicode, as far as the image dimensions
allow.

However, an inconsistency I _did_ notice is how unknown characters
would be rendered in 2.3. If a font had a font.txt, then any unknown
characters would be shown as a '?'. If a font had no font.txt however,
then suddenly any unknown characters would just come out as a space.
I fixed this behavior with the new font system; but what was actually
happening for characters to come out blank is that characters up to
U+00FF, which _were_ technically in the font image but as fully
transparent, would be shown as they were in the image, and characters
beyond U+00FF wouldn't be shown since they were outside of the image.

I don't really want to show blank characters for any character between
80-FF if it is technically inside the image, because pretty much every
single ASCII-only font.png in existence (including the one in data.zip)
contains a blank lower half, just because the font in the game had
always had this specific resolution. (We didn't want to do things that
might crash the game because something was different from what it
expected...)

We have had some confusing occasions before with the old behavior where
the fonts weren't correctly packaged or something (like when the
Catalan translator was sent the first version of the translator pack,
or when people customize their fonts wrong) and special characters were
just blank spaces.

So, instead, for characters beyond 7F, I decided to consider them part
of the font, as long as they are not blank. That means, if a character
beyond the ASCII range has any (non-alpha-0) pixels, then it will be
added, otherwise it won't be. This is just to handle legacy fonts, and
the case where all fonts are missing and the one from data.zip is used;
new fonts should just use .fontmeta or .txt to define their characters.
2023-12-15 19:54:33 -08:00
..
fonts Fixed duplicated/shifted characters 2023-11-29 10:24:07 -08:00
lang Clarify translators and programmers READMEs 2023-12-15 19:48:55 -08:00
src Load plain font.png beyond U+007F 2023-12-15 19:54:33 -08:00
VVVVVV-android Android: Update README.md for Maven package 2023-11-14 17:29:34 -08:00
.dockerignore Run CI on CentOS 7 (#574) 2021-01-11 00:30:15 -05:00
.gitignore Optimize recompilation from changing commit hash 2022-08-23 00:00:38 -07:00
CMakeLists.txt Add level debugger screen 2023-11-19 17:34:23 -08:00
CONTRIBUTORS.txt Update my GitHub username and Ved repo link 2023-10-28 19:04:44 -07:00
Dockerfile Update to SDL 2.24.0 2022-08-21 16:07:51 -07:00
fixupMac.sh Remove SDL2_mixer line from fixupMac.sh 2022-03-29 02:27:15 -04:00
icon.ico Updated .ico 2021-09-03 15:57:16 -04:00
icon.rc Embedded .ico 2021-08-28 11:21:49 -04:00
README.md README: Delete section on compiler quirks 2023-11-27 13:43:23 -08:00
version.cmake Fix %cs showing instead of commit date on Windows (or older git?) 2023-11-13 14:42:48 -08:00

How to Build

VVVVVV's official desktop versions are built with the following environments:

  • Windows: Visual Studio 2010
  • macOS: Xcode CLT, currently targeting 10.9 SDK
  • GNU/Linux: CentOS 7

The engine depends solely on SDL2 2.24.0+. All other dependencies are statically linked into the engine. The development libraries for Windows can be downloaded from SDL's website, Linux developers can find the dev libraries from their respective repositories, and macOS developers should compile and install from source. (If you're on Ubuntu and your Ubuntu is too old to have this SDL version, then see here for workarounds.)

Since VVVVVV 2.4, git submodules are used for the third party libraries. After cloning, run git submodule update --init to set all of these up. You can also use this command whenever the submodules need to be updated.

Steamworks support is included and the DLL is loaded dynamically, you do not need the SDK headers and there is no special Steam or non-Steam version. The current implementation has been tested with Steamworks SDK v1.46.

To build the Make and Play edition of the game, uncomment #define MAKEANDPLAY in MakeAndPlay.h.

To generate the projects on Windows:

# Put your SDL2 folders somewhere nice!
mkdir flibitBuild
cd flibitBuild
cmake -A Win32 -G "Visual Studio 10 2010" .. -DSDL2_INCLUDE_DIRS="C:\SDL2-2.24.0\include" -DSDL2_LIBRARIES="C:\SDL2-2.24.0\lib\x86\SDL2;C:\SDL2-2.24.0\lib\x86\SDL2main"

Note that on some systems, the SDL2_LIBRARIES list on Windows may need SDL2/SDL2main to have .lib at the end of them. The reason for this inconsistency is unknown.

Also note that if you're using a Visual Studio later than 2010, you will need to change the -G string accordingly; otherwise you will get a weird cryptic error. Refer to the list below:

  • VS 2012: "Visual Studio 11 2012"
  • VS 2013: "Visual Studio 12 2013"
  • VS 2015: "Visual Studio 14 2015"
  • VS 2017: "Visual Studio 15 2017"
  • VS 2019: "Visual Studio 16 2019"
  • VS 2022: "Visual Studio 17 2022"

To generate everywhere else:

mkdir flibitBuild
cd flibitBuild
cmake ..

macOS may be fussy about the SDK version. How to fix this is up to the whims of however Apple wants to make CMAKE_OSX_SYSROOT annoying to configure and retain each time Xcode updates.

Including data.zip

You'll need the data.zip file from VVVVVV to actually run the game! You can grab it from your copy of the game, or you can download it for free from the Make and Play page. Put this file next to your executable and the game should run.

This is intended for personal use only - our license doesn't allow you to actually distribute this data.zip file with your own forks without getting permission from us first. See LICENSE.md for more details. (If you've got a project in mind that requires distributing this file, get in touch!)