sulfonyl

pjsk

Beatmap

Animation

I guess Spine is used for the main screen chibi animation, DOTween is used for the sparkling effects while we tapping the notes, and PlayableGraph Visualizer is used for the actual note-tapping mechanism (i.e. simultanously playing the tapping sound effect when we tap the notes)

Data Serialization

It involves lot of JSONs. With special exception for MessagePack + LZ4 compression, probably when it needs a smaller data size. It probably used to package some game data, for example : opponent information, opponent score, beatmap data, event stories, etc.

Core Programming

Event-based programming. For example, every touch that we made on this app can be registered as "event". After an event happened, a certain code will be executed. Meanwhile, asynchronous is similar to event-based, but the event is "data transfer completion". After the data transfer completed, a certain code will be executed.

Not every programming language has async/event based feature from the start. So maybe that's why they need to use this library to add this functionality to Unity & NET.

Game Server

OS-specific Utilities


Low Level Details

So, this game is a Unity + C# + .NET + Mono client app.

Unity is scriptable by C#. Then, all those C# code is executed on Mono Runtime on top of Android.

Meanwhile Mono is an implementation of .NET on Linux, on top of C runtime. Remember that we can run native C code on top of Android by using Android NDK. So, Mono Runtime is a C code, run on top Android NDK. It will process C# code on Android.

While "normal" Android app is written in Java, and then run on top of "Android Runtime" (formerly Dalvik VM). This C# Android app is written in C#, and then run on top of "Mono Runtime". Mono Runtime is kinda equal to Android Runtime (a virtual machine, it runs as "intermediate" between the app and the machine code). Thanks to Android NDK, we can make our own virtual machine that execute other programming language (not just Java).

Now, what is .NET? It's (just) a collection of usable libraries. Just like Java class libraries.

So, its overall architecture is probably something like this..

Since it's a Unity app, there are a lot of C# code. So it relies on Mono Runtime instead of Android Runtime (even though it probably still communicates with Android Runtime quite often, to call some Android-specific function). Then, the app will communicate with the Parse-based server (NodeJS + MongoDB / Postgres) by sending and receiving data, either in the form of JSON, or MessagePack (for more smaller file size). Probably compressed with lz4 too, for even more smaller file size.


Update

I found a screenshot leak on Twitter that confirmed my theory (most of its in-game data is represented as a JSON file). Here's the event story data :