Schmovin’ is out!
…after, like, over a year! It’s also open-source! Do stuff with it!
This blog post isn’t a tutorial on Schmovin’. It will just cover some context around it.
What is Schmovin’?
Schmovin’ was a Haxe project for Friday Night Funkin’ (FNF) that I mainly worked on to learn more about HaxeFlixel’s internals. It was also a way for me to self-study and practice graphics programming and some software design principles with Haxe.
Design principles are definitely a thing that I will eventually learn in college, but I wanted to stay ahead a bit!
But what does Schmovin’ do? In short, Schmovin’ implements “modchart” functionality into the game, i.e. moving arrows in ways other than vertically, and was heavily inspired by the StepMania modding scene, especially NotITG, which you should check out right now!
Schmovin’ does some things differently from NotITG with its implementations of note mods, even though most of its interface can seem pretty similar to mod readers like Mirin Template. It’s also on a completely different game engine. The essence of it is pretty much “NotITG but in FNF and with less features and also limited by the capabilities of HaxeFlixel.”
Also, NotITG is closed source. Schmovin’ was… until now.
Why did you make Schmovin’? Why not just use NotITG?
Good question!
Back in early 2021, when I started working on Schmovin’, there wasn’t any easily accessible documentation on NotITG… and there still isn’t any as of writing. Though, in a recent announcement, it seems to be a new priority!
I wanted to try making a NotITG file at the time, but I was absolutely intimidated by the use of Lua and XML. There were also many attempts in the FNF modding scene to make modcharts, and most of the mods that advertised having modcharts just had… sine waves. Back then, I called it the “Sine Wave” syndrome.
In fact, here’s a snippet from an old scrapped Schmovin’ modcharting guide from November 2021 explaining the situation.
With Kade Engine’s new Lua bindings, TaroNuke, a rhythm game developer and StepMania modder (best known for UKSRT and NotITG… please check his work out), created some example code for the system.
for i=0,7,1 do
local receptor = _G['receptor_'..i]
receptor.angle = (spinLength / 7) * -math.sin((currentBeat + i*0.25) * math.pi)
-- Wow, sine (and sine with a phase shift of 3*pi/2) waves!
receptor.x = receptor.defaultX + spinLength * math.sin((currentBeat + i*0.25) * math.pi)
receptor.y = receptor.defaultY + spinLength * math.cos((currentBeat + i*0.25) * math.pi)
end
…That was the only modchart code example for Kade Engine for the longest time. So, naturally, other mods used it as a basis for modcharting.
As you can see, attempts were being made by the FNF modding community to make modcharts in Kade and Psych Engine that were not just sine waves, and I wanted to try tackling the challenge myself.
The result of that? Schmovin. An FNF modcharting engine with a mod reader, note renderers, note paths, etc.
I could go into technical detail about the challenges I’ve had while developing it (especially the hold note rendering), but it’s been a year, and I barely even remember the pain of all of it. I might have to dig through some DMs and code comments and make a separate blog post on that…
As of writing, Schmovin’ hasn’t been released yet, but, if all goes to plan, this blog should be released at the same time as Schmovin’! I did promise to release it a while back, but I “kind of” got busy during my entire senior year and summer. That’s why I didn’t upload for 10 months!
Schmovin’s been fully functional for a while, having implementations for multiple playfields and the ability to assign other variables, like note size or angles, over time.
In fact, it was meant to be a separate Haxe submodule that can easily integrate with other mod engines (even the base game, and, JUST as I am writing this, Week 7’s code got released, and I don’t think the code will break much) without having to change much of the code.
What do you mean by "easily"? (for the software nerds and people curious about Groovin')
Schmovin' was initially built on Groovin' Mod Framework, a mod of FNF that delegates modded behaviors outside of the game's original source code folder.
This means that, instead of making a mod by directly editing the source code (which is, as you may already know, bad practice), you can just make a new subclass of Groovin's Mod
class in a folder called source_mod
(separate from the game's source
folder) and register it with Groovin'. From there, Groovin' handles function calls like game loops for all registered mods.
Because of this abstraction, Schmovin' (and other mods developed out of Groovin') is mostly decoupled from the game's original code except for references to Note
or HaxeFlixel itself, and it can be easily integrated into other mod engines by using a "standalone" instance of it instead of the "Mod" subclass that Groovin' uses.
Am I going to release Groovin'? Honestly, probably... after cleaning it up a bit. As of writing, I haven't touched the codebase in months, and, for some reason, I didn't follow Haxe's codestyle and decided to use UpperCamelCase
for all Groovin' functions! You can even see evidence of it in Schmovin's source code... Sorry!
Now that the FNF modding community has calmed down a bit (at least that’s what it seems like?) I think it’s time to release it.
However, you can’t just release something without considering its consequences…
Would open-sourcing Schmovin’ be a good idea?
Let’s answer this question by answering more questions.
Would this be beneficial to the FNF modding community? What about the NotITG community?
The codebase will definitely help the FNF modding community, not only for making modcharts but for making timed events in the middle of songs too. The rendering code might also help with other peoples’ HaxeFlixel projects. Isn’t that the beauty of open-source?
I’m not so sure about how this would directly benefit the NotITG community, though. A few NotITG creators wanted to try Schmovin’, so I guess there’s that. More people might want to join the modcharting community because of this, and, considering that not a lot of people are into modcharts, I don’t think it’ll oversaturate it at all. I mean, I showed NotITG modfiles to this one guy one time and now he’s a part of the community, I guess…
Also… the Friday Night Funkin’ modding scene isn’t really known for the “playability” of its modcharts…
…and it’s these kinds of modcharts that can really leave a bad taste on players. The video may be a joke but it really does represent a lot of modcharts that aren’t meant to actually be played.
After thinking for a while, I’ve come to the conclusion that open-sourcing this project can more easily encourage introduce others into contributing to and expanding the modcharting scene.
Conclusion
…Hey, are you awake? You’ve been in a coma for a looong time…
Huh? FNF modders have flown too close to the sun…?
They’ve taken away your arrow keys and replaced them with a choice of “Dee F. Jay Kay”, “Q-Whop”, or “Ask L”…?
What is this terminology…‽
Huh? What’s that?
Whitty mod? I haven’t heard of any mod like that.
Boyfriend’s chromatics? I don’t know if he even has that… He seems pretty on-key.
Ghost tapping? That doesn’t sound good. Who you gonna call?
Kade Input? Kade? Like, the guy who made the accuracy mod? What did he input?
Kickstarter? I doubt the devs would do something like that… Sounds like a lot of responsibility.
You need some rest. Let’s go play the new Week 5 update. The devs were a few weeks late for Christmas…