After two months of intense labour, I have finally launched Hypersomnia again!

Throughout this seemingly neverending treatment, the following has been achieved:
  • Made significant state of the simulation devoid of pointers and references (except containers), enabling trivial duplication and serialization.
  • Provided constness guarantees for access to entities and components, ensuring that the model stays unalterable during rendering-time, further enforcing determinism of the simulation.
  • The concerns of an entity and definition thereof were gracefully disentangled owing to my paradigm.
  • Practically the whole entity-component-system became type-safe (on the fundamental level).
  • I learned a whole lot of metaprogramming which may or may not be considered an advantage.
  • Unfortunately, GUI is only partially refactored. Static polymorphism turns out to be a handful, so GUI is temporarily disabled. I will come back later to it.
The approaches I follow are most of the time experimental; whether it will backfire in some distant future I may not know.
Still, the underlying concepts are so orderly that I am destined to once write a treatise thereupon.
I carry out this architecture in hopes that it works in favour of knowledge of all.


I shall also announce that Linux port of Hypersomnia is on the way!

My dear high school friend [Adam], who happens to be a profound enthusiast of the OS, has bravely undertaken this task of migration.
He delved promptly into my inscrutable codebase and flicked through semantics recondite to say the least;
as a result, around half of the framework compiles successfully with GCC.

I plan to support both the server and the client on Windows and Linux systems.


Last but not least, I can already save and load the entire game state!


(Profiler view enabled)

I did some testing and it occurs that loading a 52 MB universe takes around 0.64s,
whereas saving it can be as fast as 0.25s.

Additionally, duplication of the entire cosmos is a trivial operation in the new architecture: in particular, it ain't some brutal serialization/deserialization cycle.
This is important for frequent backups server-side, for delta compression and for client-side prediction.
All of these mechanisms need to maintain a single or multiple copies of the cosmos, perhaps for further manipulation.

Since serialization is up and running, I may now revisit the world of networking.

[Some of the 3rdparties changed!]
I made heavy use of Git Submodules to properly link the repos and now the project compiles from scratch using no prebuilt libraries.

We Carried An Entire Universe Across A Bridge Tonight.
Stay tuned for more.