pjsk
Beatmap
- paralleltree/ched : "A music score editor for a certain sliding and headbanging music game." The beatmap maker and its standardized file format. The main premise of this whole game
Animation
- Spine : 2D skeletal animation tool.
- DOTween : Animation engine for Unity
- PlayableGraph Visualizer : Unity API for animations
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
- MessagePack serializer for C# : MessagePack, a smaller alternative to JSON
- lz4net : LZ4 compression for NET
- lz4 : LZ4 compression algorithm
- jsonfx : JSON for .NET
- MiniJSON : "MiniJSON Decodes and encodes simple JSON strings. Not intended for use with massive JSON strings, probably < 32k preferred. Handy for parsing JSON from inside Unity3d."
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
- UniRX : Asynchronous + Event Based Programming for Unity
- RxNET : Asynchronous + Event Based Programming for .NET
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
- Parse .NET SDK : Probably used for game server. Node.js + MongoDB / PostgreSQL based.
OS-specific Utilities
- UniSafeAreaAdjuster : Unity plugin that adjust canvas to safe area of iOS. To make sure that the game screen won't overlap with iOS UI element.
- UnityNativeGallery : "A native Unity plugin to interact with Gallery/Photos on Android & iOS"
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 :