Still not finished, but I remixed this to fix up some of the code and make it smoother overall.
Credit to Flaze for the original project.