Build your own Arcaea game client to play self-made or modified official charts!
This project can help you automate the entire workflow for building your own Arcaea game client:
- Unpack original packages automatically (with
7z
for iOS andapktool
for Android). - Generate app icons for your choosen image (with
puppeteer
). - Patch the game binary automatically.
- There're some pre-defined offsets (including pack divider) in the example project.
- You can find more patchable offsets with IDA.
- Manage your packs and songs in a structured manner and build for the server and game client easily.
- Repack the game packages automatically, with the custom name, version and so on.
- The build is fully reproducible!
- Node.js (v16) and Yarn package manager (v1)
- Chrome browser
- 7z (p7zip-full)
- apktool (v2.5.0)
- jarsigner
- ffmpeg (4.4)
The version above is tested. Other versions may work.
Only tested on Linux. Window and macOS may work.
Install NPM dependencies with yarn
:
yarn
And follow the instructions below.
See the example project.
You can add filters to a song. Supported filters are:
cut
- Params:
start
,end
- Cut a song's part from
start
millseconds toend
millseconds. The chart of all difficulties are also cut.
- Params:
chartFixSpeed
- Params: none
- Remove speed changes from a song's charts. i.e. Set all
timing()
's BPM to the song'sbpm_base
.
tempoScale
- Params:
factor
- Speed up or down a song. The chart of all difficulties are also scaled.
- The
factor
param is for the tempo. A value < 1 will speed down a song while a value > 1 will speed up a song. - Supported
factor
range is 0.5 - 2.
- Params:
To apply filters, append a filters
key to your song.yaml
. For example:
# Cut, then scale tempo to 0.9x
filters:
- name: cut
start: 111000
end: 222000
- name: tempoScale
factor: 0.9
NOTE: You may not need to use this utiltily (especially for official songs). Use from
to use an original song in your project.
If your song meta are defined in a songlist
file, this utility can help you extract them to each song's directory.
# /path/to/your/songs/songlist must exist
# Extracted song.yaml will be saved in /path/to/your/songs/<songid>
yarn util extract-songinfo /path/to/your/songs
Some self-made charts are broken since some numbers are required to keep two decimal places but they doesn't. The utility can fix the numbers in timing()
, arc()
and camera()
statements.
# Dry run
yarn util aff-fix /path/to/your/project/packs/<packname>/<songname>/*.aff
# Write changes
yarn util aff-fix -w /path/to/your/project/packs/<packname>/<songname>/*.aff
- ArcaeaModder (Android) for some Android offsets.
- ArcaeaModder (iOS) for some iOS offsets.
- Arcaea-server