Skip to content

Funkin' View vs. Psych Engine

SomeGuyWhoLovesCoding edited this page Feb 11, 2026 · 12 revisions

Warning

You will be force-fed info and stuff that you'll either have very little understanding of, or have never seen before, so take this with a grain of salt, do research on what this type of info actually does, and proceed with reading.

Note

Most of this documentation was generated with claude.ai, and had made adjustments by the person who proofreads it.

Inputs

Psych Engine uses a simpler main loop that didn't require forking lime, but this results in frame-dependent input latency.

Funkin' View's dedicated input sub-loop provides lower latency and more predictable behavior across different refresh rates—valuable if you're building mods with custom input handling or accessibility features.

The sleep rate is the rate of the smallest dividend of a frame time over 500us, which is what makes the input frame-independant whilst having buttery smooth visuals.

Note System

Unlike psych engine, which uses a modified version of fnf's og note system, funkin' view makes the use of note pooling (an optimization to improve performance and reduce memory footprint), along with support for custom note types (if implemented correctly per the planned noteskin editor documentation).

Chart Format

Funkin' View streams notes as POD (Plain Old Data) objects that are reused from a pool, drastically reducing memory footprint through memory-mapped IO.

This avoids the performance cost of JSON parsing large chart sections at once, which can be slow—especially when sections contain many notes.

Unlike Psych Engine's single-file-per-difficulty format, Funkin' View uses a multi-file structure (similar to Codename Engine's approach, though with different architecture).

And, lastly, multi-vocal support is automatically detected and converted from the json, in which you can either manually edit in header.txt or use a specific editor within it.

TL;DR Psych Engine's chart format is easily convertible to funkin' view's, at the cost of inconsistencies.

Characters

If you need to iterate on character sprites quickly, Psych Engine's in-game editor saves time; funkin' view requires you to drag and drop your character into your folder, whilst renaming the image and data file so the game recognizes it.

Characters are organized in a separate folder rather than having image and data files mixed in shared directories, like on Psych Engine.

Audio System (ft. Music time)

Flixel uses OpenAL with 20ms granularity, which causes sync issues with multi-track audio as vocals go offsync if you try to set the time of the inst and vocals at the same time.

Funkin' View uses miniaudio instead (internally an extern), providing better sync and pitch-independent playback rate (thanks to signalsmith-stretch, modified for hxcpp's default c++ version, C++11).

This addresses the sync issues inherent in OpenAL-based multi-track audio that few rhythm games besides FNF attempt.

This also addresses imprecise seeking by utilizing a double-buffered system to make decoding infrequent, quadrupling performance for people who are on low-end computers and are struggling to handle heavy codecs such as MP3 or OGG.

TL;DR Funkin' View's audio system has near-perfect sync depending on what audio format you use (mostly FLAC), and more importantly, pitch independant playback rate.

Menus

On Psych Engine, the main menu and credits each have separate FlxState instances.

Funkin' View integrates these as submenus within the pause screen, with a planned title screen as the entry point.

Credits function as an alternate version of the freeplay menu.

Main Loop

Psych Engine runs at 64fps due to its millisecond-precision main loop.

Funkin' View uses a microsecond-precision main loop. Here are the following that is possible within opening the windows build:

  • 0.5ms on Windows with high-resolution timers, available since Windows 10 v1803+

  • SDL3 SleepPrecise premise

Custom Fonts

Psych Engine tries to obtain a custom font system by either using a lua script to replace the literal vcr font file by renaming it to be the same as the one in assets/shared/fonts.

Funkin' View, on the other hand, uses a font system utilizing a library known as fontbm, in which it automatically generates font atlases for you whenever you first try to load them. Before processing, your custom font is copied over to the assets folder because fontbm is there for it.

Conclusion

That was it. I have literally nothing else to say (other than the fact the writing was improved in courtesy of claude.ai, everyday claude), but hope you genuinely enjoyed reading this.

Hello sidebar test.

Clone this wiki locally