Created on 02/09/2025
Last time I played Friday Knight Funkin was about two or three years ago, so I wanted to give it another try. I felt like nostalgia, but in the short term.
The thing is, I'm using Linux Mint, and FNF and most of its mods are primarily built for Windows. So there are some concessions to do here.
I'm using a potato PC, and I remember that on Windows, FNF was a bit slow, with low FPS, and sometimes crashed for no reason. Also, you cannot edit keybinds (try to play with WASD or arrows) and there is no week 7.
UPDATE: after trying to play it on Linux, I couldn't run it because it needs a specific version of glibc. Awesome.
That's why I prefer playing FNF FPS Plus, which is an engine mod that adds more than welcome features: a new input system, more accurate and closer to ones from other rhythm games, uncapped fps, editable keybinds, ghost tapping as well as week 7.
However, there is no Linux build on gamebanana, so here are the instructions to build the game.
If you don't want to bother compiling the game (which I completely understand), you can download the game files
here (warning: has a size of almost
1 GB). I uploaded them on Github instead of Codeberg since the former has a higher storage limit.
Have fun!
Haxe is the programming language used to develop FNF. It can be transpiled to other languages (here, JavaScript on Web and C++ on Desktop) to get better performance.
To install Haxe on Ubuntu and its derivatives you have to type these commands (see
this page if you're using another distro).
sudo apt add-repository ppa:haxe/releases
sudo apt update
sudo apt install haxe -y
mkdir ~/haxelib && haxelib setup ~/haxelib
I'll explain what each command does :
-
Apt repository does have a haxe package, but it's a former version. Knowing that the project generates a compile-time error if Haxe's version is too old, it is better to install the latest one. That's why we're using ppa.
-
update
command looks for available updates defined in reference files. With the previous command, the ppa package overwrites the default one.
-
We install Haxe and its dependencies (neko
and haxelib
).
-
haxelib
is Haxe's package manager, and it needs a directory to store installed libraries.
Yep, you read that right. This is because of the cutscenes, which require VLC C libraries to be played.
After some research (i.e. very long trials and errors), I could establish a single command to install all the necessary packages.
sudo apt install libvlccore-dev libvlc-dev vlc
You need those three packages, otherwise you will get compile-time errors, or linker ones if you don't have vlc
.
Yeah, the game has a complex architecture.
Instructions were taken from the project
readme, but I'm writing them here to save you time.
First, you have to type these commands:
haxelib --global install hmm
haxelib --global run hmm setup
hmm install
haxelib run lime setup
lime build linux
-
We install hmm library, which is able to handle non-haxelib project dependencies.
-
The setup
command creates aliases. Otherwise you'd have to write haxelib --global run hmm [command] [options]
.
-
hmm will install all libs from hmm.json
file in the project, including lime
.
-
lime is a tool enabling Haxe code to run in various platforms (you can read
this tutorial if you want to know more).
You will find the executable and the necessary content inside export/release/linux/bin/
. The bin
directory has a size of 991.9 MB. Thunar crashed after being done zipping the whole content (:
C++ compilation is too slow. It took 42 minutes for my laptop to compile the project.
Here is the output of time
command:
real 42m33,364s
user 76m31,040s
sys 4m4,015s
There are many reasons explaining that:
-
There are 1832 header files and 1905 source files that the compiler must handle, from the project AND the libraries (Haxe's stdlib, HaxeFlixel, OpenFL, etc.). I even saw some SDL stuff popping. I used the following command to count files: find $DIR_NAME -type f | wc -l
where $DIR_NAME
was include
, then src
.
-
C++ has a complex syntax, so parsing it takes more time than it would for C for example. It depends on context and must disambiguite some situations (think about template syntax, inheritance, metaprogramming).
-
Optimization may happen, which unfortunately leads to a longer compilation.
Note that my build is in debug mode. I don't even want to know how long it would have taken for release mode.
These are advices about the game configuration, but it's a matter of preference. Feel free to tweak more settings, so that you can play comfortably.
On first launch you will be welcomed by a cache settings screen. If like me, you have a low-end PC, disable music and graphics. You can find this setting again on the Misc category.
-
For low-end PCs again: disable gpu loading. The game will then be a bit faster.
-
I recommend you disable dynamic camera because it quickly gives headaches.
-
Once you understand the input system and know your timings, it's a good idea to disable glowing arrows.
-
Edit the keybinds, as the default ones are WASD and arrows. Replace them by DFJK.
-
If you wanna touch your keys while the rival sings, you can allow ghost tapping and set it to "[while] not singing".
-
I personally feel more comfortable playing with downscroll.
-
Caching doesn't seem to work. Every time I launch the game the caching screen has them same long duration.
-
There is a (not so long) lag between the intro cutscene and the title screen, which breaks the musical continuity.
-
At random moments voices and sound effects disappear during a song. Restarting the song won't fix the problem, the only solution is to restart the game. This doesn't apply to Darnell though, because for each session vocals disappear after 30 seconds.
Despite all those annoyments, I like this game, even though I prefer staying far from its community. I have a huge respect for devs caring about improvement, and sharing them. Shoutout to Rozebud for this project and his passion, and this also applies to devs of Kade Engine and Psych Engine.
I hope that you will understand that as well.
— pgmtx