Open Note Block Studio Project Status #426
Bentroen
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
This discussion is meant as a thorough, detailed report on the current status of the Open Note Block Studio project.
Current goals
Our current focus regarding the project is on three different fronts:
GameMaker version (v3.x): replacing Windows-only dependencies to allow Mac/Linux builds of the current version;
Qt version (v4.0): rewriting the program from scratch, solving numerous issues with the current version and allowing for further improvements;
Website: Note Block World will replace the old Songs page in OpenNBS's website with a more robust place for sharing and listening to note block music. This is a side project being developed in parallel with both versions above.
Status
Problems with the current version
The current version, which this repository houses, is considered feature-complete — it will not get any new major features and is no longer accepting contributions other than minor bug fixes. As such, v3.10 will likely be the last significant update in the v3.x series. We might still release v3.11, 3.12... etc. in the future, but their only purpose will be to ease the transition to the next version of the program — which you can read more about below.
Why is development on the current version being ceased? OpenNBS was written in GameMaker, a very popular game engine, in 2011. This very old codebase has accumulated numerous problems over the years:
Expand
The code needs major refactoring that has never been done, accumulating 12 years of technical debt. This is aggravated by consecutive breaking changes to the GameMaker project format that have never seen a proper migration, such that the code doesn't make efficient use of the most recent features, and instead relies on many old/deprecated ways of achieving things.
The spaghetti code makes even small bug fixes difficult. Changing something in one place breaks something in multiple different, unrelated parts of the program. A small example is that all text boxes (typable fields) are stored in a global, shared array and have a unique index, which must be assigned manually. Once the custom instrument limit was increased from 18 to 240, a bug popped up where editing layer names after a certain layer would start overwriting instrument names(!)
Since GameMaker is a game engine and not a UI framework, every element you see on the screen — text boxes, scrollbars, even the windows — is drawn from scratch based on sprites, and has all its logic/behavior implemented in our code. This greatly increases the maintenance burden and allows for little reuse of existing solutions.
There are numerous Windows-only dependencies that were only compiled for 32-bit. GameMaker has dropped 32-bit support starting in version 2022.8, so we're stuck in an old engine version until we can re-compile the DLLs, many of which are extensions developed by different authors very long ago, which are no longer supported or updated.
Again, since GameMaker is a game engine, everything you see on the screen is drawn every frame, 60 times per second, despite the program being mostly static. This limits the potential for optimizations we could make, since it's not possible to avoid drawing stuff to the screen if they haven't changed between two consecutive frames.
Even with these issues, the current version is mostly stable, works well, and has known workarounds for most of the important, long-standing issues that are not so easy to address. As such, we don't expect it to go anywhere soon — it will likely stay around for a while, serving thousands of note-blockers as well as it has for the past decade =)
However, if we'd like to significantly improve upon what's already been built (and for sure we'd like it ;) ), we must follow a different route. Despite working very well, the current version is a dead end. Technical debt has grown so large that there's no significant advantage in investing any more effort to implement new features into it.
Moving to a new version
In order to address these issues and allow further improvements to the project in the long run, we're currently in the process of rewriting the entire program to use the Qt framework — more specifically, PyQt, its bindings for the Python programming language. Once the repository is made publicly available, a link to it will be added to this repository. However, we've decided to wait until we have a minimally functional proof-of-concept, so as to not shoot ourselves in the foot :)
If everything goes well, the first public preview should be released in a few months' time, together with a roadmap of all the new features and improvements we'd like to make after we're done porting most of the existing features.
Some other developers are also working in parallel to remove/replace those Windows-only dependencies, as to allow Mac & Linux builds for the current version. We understand that it might take quite some time for the rewritten version to reach feature parity, so even with the rewrite, it is in our best interest to allow Mac/Linux users to enjoy the same experience Windows users have grown accustomed to.
As of this update, I (Bentroen) am the sole maintainer of the project. Due to my involvement with multiple paid projects, university, and other personal life matters, I currently have very limited free time to work on the project. Development shifts from very active to stale quite often, though without ever ceasing completely. Moreover, it's difficult to find new contributors to speed things up due to all the problems with the codebase. That's why things are going slow at the moment — and why it's hard to provide any ETA better than "eventually". Though, rest assured we have big plans for the future of ONBS in the coming years. Feel free to join our Discord if you'd like to follow development updates more closely!
How can I help?
If you'd like to get involved with the new version, get in touch to know when its repository will be made available.
Otherwise, if you have a bug report or feature suggestion, please open a new issue. All current open issues are being triaged based on whether they will only be implemented in the rewrite, or whether they can be implemented in the current version (most of them won't, but some aren't even issues in the new version at all!)
In the meantime, thank you for your patience and for keeping making awesome note block creations! ❤
Beta Was this translation helpful? Give feedback.
All reactions