From 7697fbe6c149c44d6fc4462b4a09b1dd7b5eca89 Mon Sep 17 00:00:00 2001 From: Fishia <74685931+FishiaT@users.noreply.github.com> Date: Sun, 26 May 2024 12:24:23 +0700 Subject: [PATCH] Deployed 28f9180 with MkDocs version: 1.6.0 --- arc-dump.html | 74 +++++- custom-charts-packs.html | 90 +++++-- offline-mod.html | 541 ++++++++++++++++++++++++++++++++++++++- private-server.html | 99 +++++-- search/search_index.js | 2 +- search/search_index.json | 2 +- sitemap.xml.gz | Bin 127 -> 127 bytes 7 files changed, 742 insertions(+), 66 deletions(-) diff --git a/arc-dump.html b/arc-dump.html index 6786bcc..c0bd173 100755 --- a/arc-dump.html +++ b/arc-dump.html @@ -334,6 +334,30 @@ + + @@ -470,6 +494,30 @@ + + @@ -488,11 +536,7 @@
Work in progress
-This page is being actively worked on. Contributions of any kind are much appreciated.
-Before proceeding with modding Arcaea, its APK/IPA file must be dumped from your device. Depending on your operating system, dumping procedure will be different.
+Before proceeding with modding Arcaea, its APK/IPA file must be dumped from your device. Depending on your operating system, the procedure will be different.
Before starting
@@ -513,10 +557,24 @@Open Sileo or any package managers that you like, add this repository: https://repo.tuandb.name.vn
. After that, install DumpDecrypter from it.
Open DumpDecrypter, switch to the Settings tab and enable all available options. Then return to the AppList tab and select Arcaea, press Continue when prompted and wait for the decryption process to complete. Arcaea will automatically open and then close shortly after. When it finishes, press Go to Filza to view (Filza must be installed from the BigBoss repository beforehand) then copy the resulting IPA to your PC and you are done!
Work in progress
-This section is being worked on.
+Info
+Requires ADB (Android Debug Bridge) and appropriate ADB/USB drivers for your phone (not required on Linux, Windows 10 or newer will most likely do this automatically for you) installed which is included in the Android SDK by default. If you do not want to install the entire platform SDK, consider installing this.
+Open Command Prompt or your favorite Terminal Emulator, then with your phone connected to your PC via USB, run adb shell pm path moe.low.arc
to fetch all paths to Arcaea APKs, it should look like this:
This is called split APKs, a new simplified APK format that split an APK file to multiple smaller APKs (e.g. one APK containing the base data, one containing the actual code, one containing assets and so on...). Normally, this format will help for more efficient application installation from Google Play due to not requiring to download a huge APK file; however, this will make it hard to mod Arcaea, so we must merge them into a normal APK file before proceeding.
+Copy the path of each APK files, and run adb pull <path to apk>
. Repeat this for the other APKs too.
Info
+A tool called SAP (Split APKs Package) will be used for this purpose. You may also be able to use any other similar functioning tools as well.
Download and open SAP, you will be presented with an interface like this:
+ +Place all of your split APKs into a folder, then click onto Directory and select that folder. If however you have a XAPK file instead, click on Archive and select that XAPK file.
+Make sure to tick the Sign checkbox, then click Start and wait as this may take a while.
diff --git a/custom-charts-packs.html b/custom-charts-packs.html index 7e8e6fa..de81c4d 100755 --- a/custom-charts-packs.html +++ b/custom-charts-packs.html @@ -72,7 +72,7 @@Work in progress
-This page is being actively worked on. Contributions of any kind are much appreciated. The content below are unfinished.
+This page is being worked on. Contributions of any kind are much appreciated.
Before starting
-This guide requires a functional private server already set up and running.
+This guide requires a functional private server already set up and running. For more details please refer to the Private Server page.
Note
Only for Arcaea 5.4.0 or newer and non-Chinese versions.
Danger
+Only for Arcaea 5.3.1 or older and Chinese versions (e.g. 5.6.3c). Requires removing hash protection before modification can be done. Refer to the respective Reverse Engineering page for more details.
+Before starting
-This page is being rewritten. There will be no precise ETAs on the completion date.
+This page is being actively worked on. Content shown below may be unfinished, unpolished, out of date, or inaccurate.
This guide is NOT beginner-friendly and you will have to figure out a lot of things yourself. Only proceed if you know what you are doing.
About modifying instructions/NOPing
+A frequent thing you will be told to do throughout this guide is to NOP or edit an instruction. There are two main ways of doing so:
+Overwriting its hex address using a hex editor. This will requires a converter that allows converting ARM instruction to hex address and vice versa. As with NOPing an instruction, overwrite its hex address with 1F 20 03 D5
for ARM64 or 00 F0 20 E3
for ARM32. This is the recommended method.
Using Keypatch. This is the simplest method to directly modifying an instruction without having to touch the hex editor. Unfortunately, Keypatch has not been updated to IDA Pro 8.x (yet), and even with older versions of IDA Pro setting it up and get it to work can be quite a pain.
+Info
Allows making changes to the game files. Only for pre-5.4.0 and Chinese versions.
In the Functions sub-window on the left, right click on Function name and choose Quick filter, then search for .exit
(Android) or _exit
(iOS).
Double-click onto it, and on the IDA View sub-window, press SPACE to switch to graph view. You will be presented with something like this, click onto the highlighted button to bring up the xref (cross-reference) window.
+ +Choose the first (Android) or second (iOS) xref entry.
+ +Note
+In case neither of entries contains what is shown below, trying looking at other entries too. Please do note that if you are modding a version of Arcaea that uses content bundle (5.4.0+), you will not be able to find it as it does not exist.
+There are 9 xref entries consisting of 6 B.NE and 3 CBNZ instructions, NOP all of them until there are none left.
+ +There are 6 xref entries consisting of 3 B.NE and 3 CBNZ instructions, NOP all of them until there are none left.
+ +Info
Remove the lock icon on locked packs. Purely for aesthetic purposes.
Press SHIFT + F12, then ALT + T and search for lock_icon
. Double-click onto it and xref it. After that, press TAB or F5 to view its pseudo-code, you will see something like this:
Find this structure and highlight v132
(name may be different), then xref it, Choose the first entry.
Double-click onto the function call to view its pseudo-code. Focus on this part.
+ +Highlight it then switch back to the IDA View sub-window. With synchronization enabled, modify MOV W8, 0
to MOV W8, 1
. Repeat this for both of the variables. After doing so, all v3
variables should have 1
as its value.
Info
Allows playing Beyond (BYD) difficulty on charts that have it.
I. Remove network required for playing beyond
+Go to Strings sub-window, Alt + T to search for You no longer
string, double-click, xref the string, scroll up until you find the SUBS
opcode like this in the image:
Open the Keypatcher (Ctrl + Alt + K), modify the #3
to #5
and press Enter.
II. Display Beyond difficulty
+Go to Strings sub-window, Alt + T to search for songs/songlist
string, double-click, xref the first string, press Alt + T and type temp
until you found this:
Click the CMP
opcode and open the Keypatcher, modify the #3
to #5
and press Enter.
III. Display the Start button
+Go to Strings sub-window, Alt + T to search for start.png
string, double-click, xref the string and find the SUBS
opcode like this in the image:
Click the SUBS
opcode and open the Keypatcher, modify the #3
to #5
and press Enter.
IV. Scan 3.aff in the apk
+Go to Strings sub-window, Alt + T to search for songs/songlist
string, scroll up a bit to find the dl_
string, xref the string until you found like this:
Click the CMP
opcode and open the Keypatcher, modify the #3
to #5
and press Enter.
And you're done with Android!
+Press SHIFT + F12, then ALT + T and search for world_unlock
. Continue doing so until you found exactly this:
Double-click onto it and xref it. Choose the last entry.
+ +Scroll down a little bit until you found this.
+ +Change CMP W8, #3
to CMP W8, #5
.
While on the IDA View sub-window, press ALT + T and search for dl_
, tick Find all occurrences and then search. Wait patiently until it completes.
Choose the first entry.
+ +Find this part and repeat the same steps as above.
+ +Return to the Strings sub-window and search for You no longer have enough
, find exactly this and xref into it.
Scroll up until you found this part, then repeat the same as above.
+ +Return to the Strings sub-window and search for layouts/songselect/start.png
, xref it. After that, find this part and repeat the same steps as above.
Info
-Only if you want to experience the April Fools charts to its fullest.
+Make special charts effects (6 lanes, camera view, green arcs, etc..) work.
+In the Strings sub-window, search for 9821191
, xref, F5 to open the Pseudocode sub-window and scroll down until you found this:
I. ArcNote (Still wondering what does it do)
+Double-click the highlighted address, Alt + T and search 148
. Tab to switch to IDA-View and see something like this:
Pseudocode | +IDA-View | +
---|---|
+ | + |
Click on the LDRB.W
opcode, open the Keypatcher and type nop.w
. Do the same thing with CBZ
opcode but use nop
.
II. Camera
+Switch to Pseudocode view, Ctrl + T to search the next value 148
. Tab to switch to IDA-View and see something like this:
Pseudocode | +IDA-View | +
---|---|
+ | + |
Click on the first LDRB.W
opcode, open the Keypatcher and type nop.w
. Do the same thing with BEQ.W
opcode.
III. Scenecontrol
+Switch to Pseudocode view, Ctrl + T to search the next value 148
. Tab to switch to IDA-View and see something like this:
Pseudocode | +IDA-View | +
---|---|
+ | + |
Click on the LDRB.W
opcode, open the Keypatcher and type nop.w
. Do the same thing with CBNZ
opcode but use nop
.
IV. Arcahv string check
+While at the Scenecontrol in Pseudocode view, scroll down until you see this:
+ +Switch to IDA-View, use the Keypatcher and nop.w
the BEQ.W
opcode.
Before | +After | +
---|---|
+ | + |
V. Green arc
+Switch to Pseudocode view, scroll down until you found this:
+ +Double-click the highlighted address, switch to IDA-View. Click on LDRB.W
opcode, use the Keypatcher and nop.w
it. After that, use the Keypatcher again to modify the #2
to #10
or any number higher than 3 (3 is white arc but they haven't used it. Not the wide skynote in HIVEMIND -INTERLINKED- ). Do the same thing with the second #2
.
Before | +After | +
---|---|
+ | + |
VI. The Switch (this will be used for others as well)
+I literally don't know why lowiro do this but ok
+In the Strings sub-window, press ALT + T and search for gameend
, double-click, xref and scroll up until you found this:
Double-click the highlighted address, switch to Hex View, F2 to edit and type 4F F0 01
(no spacing) then save it. It should be like this after editing:
Hex View
+Before | +After | +
---|---|
+ | + |
IDA-View
+Before | +After | +
---|---|
+ | + |
VII. Remove Skynote and Arc restrictions (over y2.1)
+Note: Not recommended having these 2 modded because it'll mess up a part in Singularity VVVIP. See here: https://youtu.be/3SBjWP2JEXc?t=93.
+a. Skynote
+Xref The Switch, switch to IDA-View and scroll up a bit until you found this:
+ +Use the Keypatcher and nop.w
it.
b. Arc
+In the Pseudocode view, scroll up, xref The Skynote first address, scroll up again, xref the first address, switch to IDA-View, AND scroll down until you see this:
+ +Click the 550.0, switch to Hex View, click the value 80
, press F2 to edit and type ef6749
then save it. It should be like this after editing:
Hex View
+Before | +After | +
---|---|
+ | + |
IDA-View (You'll need to press F5 again to see the magic)
+Before | +After | +
---|---|
+ | + |
And there we go! Android is done.
+In the Strings sub-window, search for 9821191
, xref, F5 to open the Pseudocode sub-window and scroll down until you found this:
I. ArcNote (Still wondering what does it do)
+Double-click the highlighted address, Alt + T and search 264
. Tab to switch to IDA-View and see something like this:
Pseudocode | +IDA-View | +
---|---|
+ | + |
Click on the LDRB
opcode, open the Keypatcher and type nop
. Do the same thing with CBZ
.
II. Camera
+Switch to Pseudocode view, Ctrl + T to search the next value 264
. Tab to switch to IDA-View and see something like this:
Pseudocode | +IDA-View | +
---|---|
+ | + |
Click on the first LDRB
opcode, open the Keypatcher and type nop
. Do the same thing with BEQ
opcode.
III. Scenecontrol
+Switch to Pseudocode view, Ctrl + T to search the next value 264
. Tab to switch to IDA-View and see something like this:
Pseudocode | +IDA-View | +
---|---|
+ | + |
Click on the LDRB
opcode, open the Keypatcher and type nop
. Do the same thing with CBNZ
opcode.
IV. Arcahv string check
+lowiro removed this in iOS and Android arm64 so let's ignore.
+V. Green arc
+Switch to Pseudocode view, scroll down until you found this:
+ +Double-click the highlighted address, switch to IDA-View. Click on LDRB
opcode that have #0x108
, use the Keypatcher and nop
it. After that, modify the first CMP
opcode to #32
. After that, patch CINC W1, W8, NE
opcode to CINC W1, W1, NE
opcode.
Before | +After | +
---|---|
+ | + |
VI. The Switch (this will be used for others as well)
+I literally don't know why lowiro do this but ok
+In the Strings sub-window, press ALT + T and search for gameend
, double-click, xref and scroll up until you found this:
Double-click the highlighted address, switch to Hex View, F2 to edit and type 20 00 80 52
(no spacing) then save it. It should be like this after editing:
Hex View
+Before | +After | +
---|---|
+ | + |
IDA-View
+Before | +After | +
---|---|
+ | + |
VII. Remove Skynote and Arc restrictions (over y2.1)
+Note: Not recommended having these 2 modded because it'll mess up a part in Singularity VVVIP. See here: https://youtu.be/3SBjWP2JEXc?t=93.
+a. Skynote
+Xref The Switch, switch to IDA-View and scroll up a bit until you found this:
+ +Use the Keypatcher to nop
for the FMOV
and TBZ W20
opcode.
b. Arc
+In the Pseudocode view, scroll up, xref The Skynote first address, scroll up again, xref the first address, switch to IDA-View, AND scroll up until you see this:
+ +Click the ADRP
, switch to Hex View, click the second hex byte value, press F2 to edit change a digit then save it (it varies in each version of the game). It should be like this after editing:
Hex View
+Before | +After | +
---|---|
+ | + |
IDA-View
+Before | +After | +
---|---|
+ | + |
And there we go! iOS is done.
+Info
-Unlocks all world mode charts.
+Unlocks all world mode charts (even byds as well i think because it counts as a world song but it just the visual, you'll need to mod the other 3 to make it playable offline).
+In the Strings sub-window, search for this song is
, xref the second one, F5 to open the Pseudocode sub-window and scroll up until you found this:
Xref | +Pseudocode | +
---|---|
+ | + |
Double-click to go to the highlighted address, click the first line in Pseudocode sub-window, press Tab to move to IDA-View, switch to Hex View, press F2 and type 01 20 70 47
(no spacing) (which is MOV R0, #1 and BX LR).
IDA-View
+Before | +After | +
---|---|
+ | + |
Hex View
+Before | +After | +
---|---|
+ | + |
In the Strings sub-window, search for this song is
, xref the first one, F5 to open the Pseudocode sub-window and scroll up until you found this:
Xref | +Pseudocode | +
---|---|
+ | + |
Double-click to go to the highlighted address, click the first line in Pseudocode sub-window, press Tab to move to IDA-View, switch to Hex View, press F2 and type 20 00 80 52 C0 03 5F D6
(no spacing) (which is MOV W0, #1 and RET).
IDA-View
+Before | +After | +
---|---|
+ | + |
Hex View
+Before | +After | +
---|---|
+ | + |
Once you're done, press F2 again to save it.
+All done!
+And there you have it. Good luck modding. Post-5.4.0 will be written sooner or later.
Open the appropriate executable file for your operating system, and wait for the initial auto-analysis to complete (indicated by the status bar at the bottom showing Idle.) This process may take a while depending on your computer so please be patient.
After the initial auto-analysis, Press SHIFT + F12 and wait for the string list to be generated (again, this may take a while.)
+In the Strings sub-window, press ALT + T and search for cookieFiIe.txt
until you found exactly this.
Double-click it, and while highlighting this part, press X to perform xref (cross-reference.)
@@ -717,8 +720,36 @@Highlight this part, and NOP it like above:
-After that, apply the patches and you are done!
-After patching the executable, save the file and recompress the APK/IPA file. For Android, you must resign the APK file before installing it onto your device. You may now sideload it onto your device using ADB, AppSync Unified (not recommended due to potential crashes and issues.), AltStore (& friends) or TrollStore (recommended for supported devices.)
+Note
+This section is a simplified and slightly adjusted version of this guide.
+Switch to the IDA View sub-window, and press Alt + I or Search > Immediate value..., a window like this will show up, enter 408
, tick Find all occurrences and then search.
After that, you should see something like this.
+ +Click Instruction to sort it, then scroll up until you found this:
+ +Double-click onto it, then press TAB, F5 or View > Open subviews > Generate pseudo-code and you should see something like this.
+ +Click onto the function name and xref it, choose the only entry in the list.
+ +You will be brought to another function, this time switch back to IDA View and enable synchronization by Right click > Synchronize with > Pseudocode-... After that you should now see something like this, NOP the highlighted part:
+ +Return to the IDA View sub-window, and press Alt + I or Search > Immediate value..., enter 488
, tick Find all occurrences and then search. You will see something like this:
Sort it, then scroll up until you found something like this:
+ +Double-click onto it, and switch to pseudo-code view and it should look like this:
+ +Continue repeating the same steps as above: click onto the function name, xref it, switch to IDA View and nop the BL
instruction.
After patching the executable, save the file and recompress the APK/IPA file. For Android, you must re-sign the APK file before installing it onto your device. You may now transfer and sideload it onto your device using your favorite method.
For this section, you will need:
Close that window, and go to Help > Local IP Addresses. It will look something like this:
-Your local IP address will most likely be the first item in the list (in this case, since I am using Ethernet connection, it will be the first one.) Copy that IP address or memorize it.
+Now, ignore everything with "Virtual" in it (as those are for Hyper-V, Wi-Fi hotspots or ad-hoc networks, all of which has nothing to do with what we are doing). Check what type of internet connection are you using (either Ethernet or Wi-Fi) and then pick the appropriate adapter. In this case, my computer is connected through Ethernet connection, and it has a Broadcom adapter, I will pick the first one.
About local IP addresses
-This is your local IP address, meaning it can only be accessed by devices that are connected to the same network.
+This IP address is not a public IP address, and therefore cannot be accessed from other networks.
You may now close that window and press CTRL + ALT + M or Tools > Map Remote..., tick Enable Map Remote and press Add. Tweak it like this:
-In the Map To section, the Host textbox needs to be your local IP address that you got from above, and the Port textbox is a 4 digit number that your server will be running on. Pick any numbers you want except for ports like 8888 or 8889 and memorize it along with your local IP address. Press OK. The map remote interface should look like this in the end:
+In the Map To section, the Host textbox needs to be your local IP address that you got from above, and the Port textbox is a 4 digit number that your server will be running on. Pick any numbers you want except for common ports like 8888 and the two ports that you have put in when setting up the prory above (both HTTP and SOCKS) and memorize it along with your local IP address. Press OK. The map remote interface should look like this in the end:
You may now close that window. At this point, the proxy is now ready.
/hanami/29
For ALLOW_APPVERSION, remove everything inside. You may add a version to the list (e.g. `5.6.1) if you want to restrict the server to (a) specific server.
+For ALLOW_APPVERSION, remove everything inside. You may add a version to the list (e.g. 5.6.1
) if you want to restrict the server to (a) specific server.
For this part:
@@ -813,38 +844,56 @@Note
-The content bundle in the server must be the same as the one existing in your Arcaea client (the metadata and content MUST match) as otherwise you will encounter issues when trying to login. If you change the content bundle in the server, the one on the client should be redownloaded.
+The content bundle in the server must be the same as the one existing in your Arcaea client (the metadata and content MUST match) as otherwise you will encounter issues when trying to login. If you change the content bundle in the server, the one on the client must be re-downloaded.
To avoid issues, use the content bundle that you have obtained earlier.
Put any songs you have into the songs
folder. A song is a folder containing multiple .aff files (every difficulties of the song), base.jpg files (the jacket art), the song itself, the PV video for Terminal songs, and any additional files for that song.
Make any adjustments you want to make.
-songs
folder. Each chart is a folder containing at least 3 .aff files (PST/PRS/FTR difficulties, some may also contain additional .aff files for BYD/ETR difficulties), the base.ogg
file (the song itself), PV video (separated into video and audio files respectively EXCEPT for Arghena which only contains the video in two resolutions 720p and 1080p, one will be downloaded by Arcaea client depending on the graphic setting) and all additional files required by it.Note
+When attempting to play a song that is not in the default Arcaea pack, the game will prompt the player to download it from the server. If the chart folder itself or any of the required files are missing, the download will fail. All required files, song, and difficulties are defined in the songlist
file bundled in the content bundle. For more details please refer to the respective Custom Charts & Packs page.
At this point, the server software is now ready.
Note
-Your phone and your computer (the one that runs the server) MUST be connected to the same network for the server to work.
+Your phone and your computer (the one that runs the server) MUST be connected to the same network for the server to work. If you want to publicize your server, port forwarding or a VPS/cloud serve is required. Setting this up is (at the moment) out of scope for this guide.
Pick one of the methods you want to use.
+Info
+This is the recommended method; however, it involves using a paid app. Other similarly functioning proxy apps may also work with some configuration. If you do not want to install anything or simply do not wish to use a paid app, considering checking out the Wi-Fi Proxy Settings method instead.
+Firstly, install Shadowrocket onto your device.
+Now open it, and press on the + icon on the upper right of the interface. Press Type and select Socks5 (without the TLS part). In the Address field, enter your local IP address. In the Port field, enter 8889 (adjust if you have set a different port during proxy setup, specifically, the port for the SOCKS server), press Save while leaving everything else as-is. Press Global Routing and change it to Proxy, return to the main interface and enable the proxy. iOS will prompt you to allow VPN connection, press Allow and authenticate if needed. The VPN
icon will show up on your status bar, indicating that you are now connected to the proxy. Press Connectivity Test to check if the connection is working properly.
Info
+The alternative method. Requires re-configuration for new Wi-Fi networks.
+Open the Settings app, go to Wi-Fi settings, press the ! icon on the connected network, scroll down until you found the HTTP Proxy settings. In the Configure Proxy settings, select Manual and fill in the Server field which is your local IP address and the Port field which is 8888. Now press Save and (optionally) turn off and reconnect to your Wi-Fi network.
-Now on your computer, return to Charles and go to Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser. A window like this will show up:
+Your device should now be connected to the proxy.
+On your computer, return to Charles and go to Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser. A window like this will show up:
Follow the steps listed in it to install the Charles certificate onto your device. You will also need to go to Settings > General > About > Certificate Trust Settings and enable full trust for the newly added certificate for it to take affect.
Warning
-From limited testing, Android is finicky when it comes to maintaining connection to proxy server. Things may not work correctly or even at all. If you have a way to fix this, feel free to contribute!
-Go back to Charles and go to Help > SSL Proxying > Save Charles Root Certificate... Save the .pem file somewhere. Rename the .pem extension to .crt. Now transfer this file to your Android device and install it to both categories.
-On Android, you will need to rely on a proxifier app such as VProxid or RProxid (requires root, recommended). You need to connect through the SOCKS5 proxy server.
+Go back to Charles and go to Help > SSL Proxying > Save Charles Root Certificate... Save the .pem file somewhere. Rename the .pem extension to .crt. Now transfer this file to your Android device and install it to the VPN & Apps category.
+On Android, you will need to rely on a proxifier app such as VProxid or RProxid (requires root, recommended).
After installing either of the proxifier app, open it and press the + icon, for Server IP, enter your local IP address; for Server Port, enter 8889. Scroll down a little bit and press Click to select application(s) then tick Arcaea. Now return and press the play button to start the VPN. Wait until it shows all good.
Nothing works, even logging in.
-> Check if the GAME_API_PREFIX
variable in the config.py
file is set correctly. If that did not work, make sure you have set up the proxy correctly (refer to the Proxy setup and On device proxy setup section.)
Potential system not working.
+-> In order to make potential work, you will need to add the charts data onto the server database with the appropriate difficulty constant. Refer to the respective Custom Charts & Packs page for more info.
diff --git a/search/search_index.js b/search/search_index.js index f57c8a4..0d0219e 100755 --- a/search/search_index.js +++ b/search/search_index.js @@ -1 +1 @@ -var __index = {"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"index.html","title":"Welcome to Arcaea Modding Wiki!","text":"This is a (work-in-progress) centralized wiki for everything Arcaea modding related!
Disclaimer
Everything present in this wiki is made purely for educational and research purposes. By following anything in this wiki, you acknowledge that under no circumstances shall we be held legally responsible or liable for any consequences that may arise from your actions. No proprietary and paid assets, resources and files will be provided and must be individually obtained through official means.
Looking for contributors!
Arcaea Modding Wiki is looking for contributors! The wiki still needs much polishing and improving such as better reference images and such. If you want to contribute, visit the GitHub repository!
"},{"location":"arc-dump.html","title":"Obtaining Arcaea APK/IPA","text":"Work in progress
This page is being actively worked on. Contributions of any kind are much appreciated.
Before proceeding with modding Arcaea, its APK/IPA file must be dumped from your device. Depending on your operating system, dumping procedure will be different.
"},{"location":"arc-dump.html#ios","title":"iOS","text":"Before starting
Either TrollStore or a jailbroken device is required. As a result, you will not be able to perform anything listed in here if you are using any devices that were updated to iOS 16.6.1 or newer and is not checkm8-vulnerable.
Before proceeding, make sure you have Arcaea installed and have opened at least once.
"},{"location":"arc-dump.html#using-trolldecrypt","title":"Using TrollDecrypt","text":"Info
The recommended method. Works for all versions that are supported by TrollStore.
Install TrollDecrypt onto your device using TrollStore, then open it. All apps that can be decrypted will be listed, select Arcaea and choose Yes when prompted. The decryption process will take a while. When it finishes, the resulting IPA will be available form within the app, copy it to your PC and you are done!
"},{"location":"arc-dump.html#using-dumpdecrypter","title":"Using DumpDecrypter","text":"Info
An alternative to TrollDecrypt for devices that is not supported by TrollStore. May not work with rootless jailbreaks (e.g. Dopamine, palera1n).
Open Sileo or any package managers that you like, add this repository: https://repo.tuandb.name.vn
. After that, install DumpDecrypter from it.
Open DumpDecrypter, switch to the Settings tab and enable all available options. Then return to the AppList tab and select Arcaea, press Continue when prompted and wait for the decryption process to complete. Arcaea will automatically open and then close shortly after. When it finishes, press Go to Filza to view (Filza must be installed from the BigBoss repository beforehand) then copy the resulting IPA to your PC and you are done!
"},{"location":"arc-dump.html#android","title":"Android","text":"Work in progress
This section is being worked on.
"},{"location":"custom-charts-packs.html","title":"Adding custom charts/packs","text":"Work in progress
This page is being actively worked on. Contributions of any kind are much appreciated. The content below are unfinished.
Before starting
This guide requires a functional private server already set up and running.
"},{"location":"custom-charts-packs.html#unpacking-the-content-bundle","title":"Unpacking the content bundle","text":"Note
Only for Arcaea 5.4.0 or newer and non-Chinese versions.
"},{"location":"custom-charts-packs.html#songlistpacklist-files","title":"songlist/packlist files","text":""},{"location":"custom-charts-packs.html#private-server-database","title":"Private server database","text":""},{"location":"custom-charts-packs.html#custom-packs","title":"Custom packs","text":""},{"location":"custom-charts-packs.html#custom-charts","title":"Custom charts","text":""},{"location":"custom-charts-packs.html#repacking-the-content-bundle","title":"Repacking the content bundle","text":""},{"location":"offline-mod.html","title":"Reverse Engineering Arcaea","text":"Before starting
This page is being rewritten. There will be no precise ETAs on the completion date.
This guide is NOT beginner-friendly and you will have to figure out a lot of things yourself. Only proceed if you know what you are doing.
"},{"location":"offline-mod.html#removing-hash-verification","title":"Removing hash verification","text":"Info
Allows making changes to the game files. Only for pre-5.4.0 and Chinese versions.
"},{"location":"offline-mod.html#removing-lock-icon","title":"Removing lock icon","text":"Info
Remove the lock icon on locked packs. Purely for aesthetic purposes.
"},{"location":"offline-mod.html#removing-beyond-locks","title":"Removing beyond locks","text":"Info
Allows playing Beyond (BYD) difficulty on charts that have it.
"},{"location":"offline-mod.html#patching-scenecontrol","title":"Patching scenecontrol","text":"Info
Only if you want to experience the April Fools charts to its fullest.
"},{"location":"offline-mod.html#removing-world-mode-restrictions","title":"Removing world mode restrictions","text":"Info
Unlocks all world mode charts.
"},{"location":"private-server.html","title":"Setting up your own Arcaea server","text":"Before starting
Make sure you have dumped Arcaea APK/IPA from your device before proceeding.
"},{"location":"private-server.html#obtaining-content-bundle","title":"Obtaining content bundle","text":"Note
Only for Arcaea 5.4.0+ and non-Chinese versions.
Starting from Arcaea 5.4.0, the game now uses content bundle to deliver base contents such as characters and songs. You must obtain this before proceeding.
Obtaining the content bundle will requires you to install Arcaea once and let it finish downloading the bundle (~491 MB).
Tip
Force quit the game AFTER the content bundle is downloaded (before file verification).
After downloading it, steps to get the files will be different depending on your operating system
For Android, the content bundle is stored in /data/data/moe.low.arc/files
. Root/custom recoveries (e.g. TWRP) is required to access this directory. Shizuku will not work.
For iOS, the content bundle is stored in /var/mobile/Containers/Data/Application/<Arcaea data container ID>/Library/Application Support
. Filza or an unsandboxed file manager is required to access this directory.
Copy the dltemp
folder to your computer. Inside it should contain 2 files with the same filename: one with .bundle and one with .json.
Note
If you had already patched Arcaea, feel free to skip this section and proceed to Setting up private server.
"},{"location":"private-server.html#using-binary-patches","title":"Using Binary Patches","text":"Before starting
You will need a software that allows applying .xdelta
binary patches. DeltaPatcher is used in this guide.
Warning
Android will receive patches for newer versions slower than iOS. As an alternative, try patching it yourself or wait until Android patches is made.
Download the appropriate patch for your version:
iOSAndroid 5.6.3Download
5.6.1Download
5.6.3Being updated, please come back later!
Now open DeltaPatcher, you will be presented with an interface like this:
Select the appropriate unmodified executable, and the appropriate patch, then press Apply patch.
After that, you are done!
"},{"location":"private-server.html#manual-patching-advanced","title":"Manual patching (Advanced)","text":"Before starting
This section requires basic knowledge of disassembling as well as Googling. You will also need a disassembler with support for ELF/Mach-O arm64 executables and pseudo-code decompilation for this section. IDA Pro is used here.
About NOP
1F 20 03 D5
is the hex equivalent of ARM64 nop
instruction. Overwrite a hex address with it when you want to remove a specific instruction call.
Open the appropriate executable file for your operating system, and wait for the initial auto-analysis to complete (indicated by the status bar at the bottom showing Idle.) This process may take a while depending on your computer so please be patient.
After the initial auto-analysis, Press SHIFT + F12 and wait for the string list to be generated (again, this may take a while.)
In the Strings sub-window, press ALT + T and search for cookieFiIe.txt
until you found exactly this.
Double-click it, and while highlighting this part, press X to perform xref (cross-reference.)
Choose the second xref (for Android) or the only present xref (for iOS) and press ENTER.
Press F5 or View > Open subviews > Generate pseudocode (this will not work if IDA is still analyzing the binary), wait for the decompilation to complete (may take a while) until you see something like this (may differ depending on version used but the general structure should be the same):
Scroll to bottom until you see this part, then highlight it by clicking onto it (names may be different but the structure should remain the same.)
Now switch to the Hex View sub-window, make sure it synchronizes with the Pseudo Code sub-window, and NOP it.
After that, make sure the entire code line is absent when re-decompiled.
Now return to the Strings sub-window, and this time search for vtvtvt
.
xref it, and choose the first xref entry for iOS, or the one with @PAGE
for Android.
Decompile it again, and scroll down a little bit until you see this part:
Highlight this part, and NOP it like above:
After that, apply the patches and you are done!
After patching the executable, save the file and recompress the APK/IPA file. For Android, you must resign the APK file before installing it onto your device. You may now sideload it onto your device using ADB, AppSync Unified (not recommended due to potential crashes and issues.), AltStore (& friends) or TrollStore (recommended for supported devices.)
"},{"location":"private-server.html#setting-up-private-server","title":"Setting up private server","text":"For this section, you will need:
Python 3.6 or newer.
Charles (recommended), Fiddler Classic or any programs that allows redirecting HTTP requests through a proxy.
Time and patience.
Warning
Using any other OSes other than Windows for this may or may not work. You may need to figure stuff out on your own.
First, you need to obtain the server software. We will be using Lost-MSth's Arcaea-server for this purpose. You may obtain it using git
like this git clone https://github.com/Lost-MSth/Arcaea-server -b dev
or by downloading the ZIP file of the dev
branch.
After obtaining the server software, navigate to its directory (<Arcaea-server>/latest version
), and with Python 3.6 or newer installed, run pip install -m requirements.txt
.
From here, certain steps may differ depending on your operating system and the proxy software you picked. We will be using iOS and Charles in this case but the same can also be done for other similarly functioning software.
"},{"location":"private-server.html#proxy-setup","title":"Proxy setup","text":"Open Charles and you will be presented with an interface like this:
Press CTRL + SHIFT + L or Proxy > SSL Proxying Settings and tick the Enable SSL Proxying box. After that, click Add, fill *
for both Host and Port then press OK, after that untick the newly added box. In the end, the SSL Proxying Settings window should look like this:
Close that window, go to Proxy > Proxy Settings and tweak it exactly like this image:
Navigate to the Windows tab and tick all checkboxes:
Close that window, and go to Help > Local IP Addresses. It will look something like this:
Your local IP address will most likely be the first item in the list (in this case, since I am using Ethernet connection, it will be the first one.) Copy that IP address or memorize it.
About local IP addresses
This is your local IP address, meaning it can only be accessed by devices that are connected to the same network.
You may now close that window and press CTRL + ALT + M or Tools > Map Remote..., tick Enable Map Remote and press Add. Tweak it like this:
In the Map To section, the Host textbox needs to be your local IP address that you got from above, and the Port textbox is a 4 digit number that your server will be running on. Pick any numbers you want except for ports like 8888 or 8889 and memorize it along with your local IP address. Press OK. The map remote interface should look like this in the end:
You may now close that window. At this point, the proxy is now ready.
"},{"location":"private-server.html#server-software","title":"Server software","text":"The server software directory will look like this:
Copy the config.example.py file into a file named config.py and open it with your favorite text editor.
Most of the config properties should already be self-explanatory. Below is guide for a few important parts.
Remember that local IP address and port that you memorized not long ago? Well enter it here:
HOST is your local IP address and PORT is the port you have choosen earlier.
For GAME_API_PREFIX, this will differ depending on your Arcaea version. Refer to the table below.
Version Prefix 5.5.6 -> 5.6.1/hanami/29
For ALLOW_APPVERSION, remove everything inside. You may add a version to the list (e.g. `5.6.1) if you want to restrict the server to (a) specific server.
For this part:
If you want to use link play functionality, the only variables you need to care about are LINKPLAY_HOST and LINKPLAY_AUTHENTICATION.
LINKPLAY_HOST needs to be the same as the IP address you have set in the HOST variable earlier unless the SET_LINKPLAY_SERVER_AS_SUB_PROCESS variable is set to False
, at which you will need to specify a separate IP address for the link play server.
For LINKPLAY_AUTHENTICATION, you can leave it as-is or type in anything you want.
If you do not want to use link play functionality, the LINKPLAY_HOST variable needs to be an empty string.
For SSL_CERT and SSL_KEY, if you want to have the server running under HTTPS, you may supply an SSL certificate here if you have one (.pem and .key file).
Warning
Running the server under HTTPS may cause issues with downloading packs/songs.
Adjust the rest of the config file to your own likings. Save the file after finished.
Now go to the database
folder and it will look like this:
Run the database_initialize.py
file to generate the database. Make sure you have installed all dependencies prior to running it in order for it to work. A file named arcaea_database.db
will be created if successful. After that, do all of these:
bundle
folder. The actual bundle must have the .cb
extension and the meta file must have the .json
extension. Both must have the same filename (e.g. 5.6.0
).Note
The content bundle in the server must be the same as the one existing in your Arcaea client (the metadata and content MUST match) as otherwise you will encounter issues when trying to login. If you change the content bundle in the server, the one on the client should be redownloaded.
To avoid issues, use the content bundle that you have obtained earlier.
Put any songs you have into the songs
folder. A song is a folder containing multiple .aff files (every difficulties of the song), base.jpg files (the jacket art), the song itself, the PV video for Terminal songs, and any additional files for that song.
Make any adjustments you want to make.
At this point, the server software is now ready.
"},{"location":"private-server.html#on-device-setup","title":"On device setup","text":"Note
Your phone and your computer (the one that runs the server) MUST be connected to the same network for the server to work.
iOSAndroidOpen the Settings app, go to Wi-Fi settings, press the ! icon on the connected network, scroll down until you found the HTTP Proxy settings. In the Configure Proxy settings, select Manual and fill in the Server field which is your local IP address and the Port field which is 8888. Now press Save and (optionally) turn off and reconnect to your Wi-Fi network.
Now on your computer, return to Charles and go to Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser. A window like this will show up:
Follow the steps listed in it to install the Charles certificate onto your device. You will also need to go to Settings > General > About > Certificate Trust Settings and enable full trust for the newly added certificate for it to take affect.
Warning
From limited testing, Android is finicky when it comes to maintaining connection to proxy server. Things may not work correctly or even at all. If you have a way to fix this, feel free to contribute!
Go back to Charles and go to Help > SSL Proxying > Save Charles Root Certificate... Save the .pem file somewhere. Rename the .pem extension to .crt. Now transfer this file to your Android device and install it to both categories.
On Android, you will need to rely on a proxifier app such as VProxid or RProxid (requires root, recommended). You need to connect through the SOCKS5 proxy server.
After installing either of the proxifier app, open it and press the + icon, for Server IP, enter your local IP address; for Server Port, enter 8889. Scroll down a little bit and press Click to select application(s) then tick Arcaea. Now return and press the play button to start the VPN. Wait until it shows all good.
Now your device is ready to connect to the private server!
Note
Disable the proxy when you have finished playing to prevent connectivity issues. The proxy will need to be re-enabled everytime you want to use the server. A dedicated 24/7 server such as a Raspberry Pi, a spare phone/computer with working shell, or a cloud server (VPS) is recommended for always-on server hosting.
"},{"location":"private-server.html#playing","title":"Playing","text":"Return to the root directory of your server and run the run.bat
file. It may take a while to start depending on the amount of songs you added. If the server console shows this:
Congratulations! Your server is now up and running! Now all that left is open Arcaea and play!
If you see something like this, it means the server is working as intended.
At this point, you are basically done! Enjoy your new server!
"},{"location":"private-server.html#fixes-for-notable-issues","title":"Fixes for notable issues","text":"The game kept prompting to update a pack despite having already downloaded it.
-> Check the song folders to see if they are named correctly and that all files (plus PV videos and audios if exists) are inside.
Cannot download any songs.
-> Make sure the server is running under HTTP connection. For iOS, you may need to edit the Info.plist
file using a plist editor to allow HTTP connection without a jailbreak by setting NSAllowsArbitraryLoads
property to true
.
Nothing works, even logging in.
-> Check if the GAME_API_PREFIX
variable in the config.py
file is set correctly. If that did not work, make sure you have set up the proxy correctly (refer to the Proxy setup and On device proxy setup section.)
This is a (work-in-progress) centralized wiki for everything Arcaea modding related!
Disclaimer
Everything present in this wiki is made purely for educational and research purposes. By following anything in this wiki, you acknowledge that under no circumstances shall we be held legally responsible or liable for any consequences that may arise from your actions. No proprietary and paid assets, resources and files will be provided and must be individually obtained through official means.
Looking for contributors!
Arcaea Modding Wiki is looking for contributors! The wiki still needs much polishing and improving such as better reference images and such. If you want to contribute, visit the GitHub repository!
"},{"location":"arc-dump.html","title":"Obtaining Arcaea APK/IPA","text":"Before proceeding with modding Arcaea, its APK/IPA file must be dumped from your device. Depending on your operating system, the procedure will be different.
"},{"location":"arc-dump.html#ios","title":"iOS","text":"Before starting
Either TrollStore or a jailbroken device is required. As a result, you will not be able to perform anything listed in here if you are using any devices that were updated to iOS 16.6.1 or newer and is not checkm8-vulnerable.
Before proceeding, make sure you have Arcaea installed and have opened at least once.
"},{"location":"arc-dump.html#using-trolldecrypt","title":"Using TrollDecrypt","text":"Info
The recommended method. Works for all versions that are supported by TrollStore.
Install TrollDecrypt onto your device using TrollStore, then open it. All apps that can be decrypted will be listed, select Arcaea and choose Yes when prompted. The decryption process will take a while. When it finishes, the resulting IPA will be available form within the app, copy it to your PC and you are done!
"},{"location":"arc-dump.html#using-dumpdecrypter","title":"Using DumpDecrypter","text":"Info
An alternative to TrollDecrypt for devices that is not supported by TrollStore. May not work with rootless jailbreaks (e.g. Dopamine, palera1n).
Open Sileo or any package managers that you like, add this repository: https://repo.tuandb.name.vn
. After that, install DumpDecrypter from it.
Open DumpDecrypter, switch to the Settings tab and enable all available options. Then return to the AppList tab and select Arcaea, press Continue when prompted and wait for the decryption process to complete. Arcaea will automatically open and then close shortly after. When it finishes, press Go to Filza to view (Filza must be installed from the BigBoss repository beforehand) then copy the resulting IPA to your PC and you are done!
"},{"location":"arc-dump.html#android","title":"Android","text":"Info
Requires ADB (Android Debug Bridge) and appropriate ADB/USB drivers for your phone (not required on Linux, Windows 10 or newer will most likely do this automatically for you) installed which is included in the Android SDK by default. If you do not want to install the entire platform SDK, consider installing this.
"},{"location":"arc-dump.html#dumping-split-apks","title":"Dumping split APKs","text":"Open Command Prompt or your favorite Terminal Emulator, then with your phone connected to your PC via USB, run adb shell pm path moe.low.arc
to fetch all paths to Arcaea APKs, it should look like this:
This is called split APKs, a new simplified APK format that split an APK file to multiple smaller APKs (e.g. one APK containing the base data, one containing the actual code, one containing assets and so on...). Normally, this format will help for more efficient application installation from Google Play due to not requiring to download a huge APK file; however, this will make it hard to mod Arcaea, so we must merge them into a normal APK file before proceeding.
Copy the path of each APK files, and run adb pull <path to apk>
. Repeat this for the other APKs too.
Info
A tool called SAP (Split APKs Package) will be used for this purpose. You may also be able to use any other similar functioning tools as well.
Download and open SAP, you will be presented with an interface like this:
Place all of your split APKs into a folder, then click onto Directory and select that folder. If however you have a XAPK file instead, click on Archive and select that XAPK file.
Make sure to tick the Sign checkbox, then click Start and wait as this may take a while.
"},{"location":"custom-charts-packs.html","title":"Adding your own charts/packs/etc...","text":"Work in progress
This page is being worked on. Contributions of any kind are much appreciated.
Before starting
This guide requires a functional private server already set up and running. For more details please refer to the Private Server page.
"},{"location":"custom-charts-packs.html#the-content-bundle","title":"The content bundle","text":"Note
Only for Arcaea 5.4.0 or newer and non-Chinese versions.
"},{"location":"custom-charts-packs.html#the-apkipa-file","title":"The APK/IPA file","text":"Danger
Only for Arcaea 5.3.1 or older and Chinese versions (e.g. 5.6.3c). Requires removing hash protection before modification can be done. Refer to the respective Reverse Engineering page for more details.
"},{"location":"custom-charts-packs.html#meta-files","title":"Meta files","text":""},{"location":"custom-charts-packs.html#server-database","title":"Server database","text":""},{"location":"custom-charts-packs.html#custom-packs","title":"Custom packs","text":""},{"location":"custom-charts-packs.html#custom-charts","title":"Custom charts","text":""},{"location":"custom-charts-packs.html#custom-courses","title":"Custom courses","text":""},{"location":"custom-charts-packs.html#custom-world-mode-maps","title":"Custom world mode maps","text":""},{"location":"offline-mod.html","title":"Reverse Engineering Arcaea","text":"Before starting
This page is being actively worked on. Content shown below may be unfinished, unpolished, out of date, or inaccurate.
This guide is NOT beginner-friendly and you will have to figure out a lot of things yourself. Only proceed if you know what you are doing.
About modifying instructions/NOPing
A frequent thing you will be told to do throughout this guide is to NOP or edit an instruction. There are two main ways of doing so:
Overwriting its hex address using a hex editor. This will requires a converter that allows converting ARM instruction to hex address and vice versa. As with NOPing an instruction, overwrite its hex address with 1F 20 03 D5
for ARM64 or 00 F0 20 E3
for ARM32. This is the recommended method.
Using Keypatch. This is the simplest method to directly modifying an instruction without having to touch the hex editor. Unfortunately, Keypatch has not been updated to IDA Pro 8.x (yet), and even with older versions of IDA Pro setting it up and get it to work can be quite a pain.
Info
Allows making changes to the game files. Only for pre-5.4.0 and Chinese versions.
In the Functions sub-window on the left, right click on Function name and choose Quick filter, then search for .exit
(Android) or _exit
(iOS).
Double-click onto it, and on the IDA View sub-window, press SPACE to switch to graph view. You will be presented with something like this, click onto the highlighted button to bring up the xref (cross-reference) window.
Choose the first (Android) or second (iOS) xref entry.
Note
In case neither of entries contains what is shown below, trying looking at other entries too. Please do note that if you are modding a version of Arcaea that uses content bundle (5.4.0+), you will not be able to find it as it does not exist.
iOSAndroidThere are 9 xref entries consisting of 6 B.NE and 3 CBNZ instructions, NOP all of them until there are none left.
There are 6 xref entries consisting of 3 B.NE and 3 CBNZ instructions, NOP all of them until there are none left.
"},{"location":"offline-mod.html#removing-lock-icon","title":"Removing lock icon","text":"Info
Remove the lock icon on locked packs. Purely for aesthetic purposes.
Press SHIFT + F12, then ALT + T and search for lock_icon
. Double-click onto it and xref it. After that, press TAB or F5 to view its pseudo-code, you will see something like this:
Find this structure and highlight v132
(name may be different), then xref it, Choose the first entry.
Double-click onto the function call to view its pseudo-code. Focus on this part.
Highlight it then switch back to the IDA View sub-window. With synchronization enabled, modify MOV W8, 0
to MOV W8, 1
. Repeat this for both of the variables. After doing so, all v3
variables should have 1
as its value.
Info
Allows playing Beyond (BYD) difficulty on charts that have it.
AndroidiOSI. Remove network required for playing beyond
Go to Strings sub-window, Alt + T to search for You no longer
string, double-click, xref the string, scroll up until you find the SUBS
opcode like this in the image:
Open the Keypatcher (Ctrl + Alt + K), modify the #3
to #5
and press Enter.
II. Display Beyond difficulty
Go to Strings sub-window, Alt + T to search for songs/songlist
string, double-click, xref the first string, press Alt + T and type temp
until you found this:
Click the CMP
opcode and open the Keypatcher, modify the #3
to #5
and press Enter.
III. Display the Start button
Go to Strings sub-window, Alt + T to search for start.png
string, double-click, xref the string and find the SUBS
opcode like this in the image:
Click the SUBS
opcode and open the Keypatcher, modify the #3
to #5
and press Enter.
IV. Scan 3.aff in the apk
Go to Strings sub-window, Alt + T to search for songs/songlist
string, scroll up a bit to find the dl_
string, xref the string until you found like this:
Click the CMP
opcode and open the Keypatcher, modify the #3
to #5
and press Enter.
And you're done with Android!
Press SHIFT + F12, then ALT + T and search for world_unlock
. Continue doing so until you found exactly this:
Double-click onto it and xref it. Choose the last entry.
Scroll down a little bit until you found this.
Change CMP W8, #3
to CMP W8, #5
.
While on the IDA View sub-window, press ALT + T and search for dl_
, tick Find all occurrences and then search. Wait patiently until it completes.
Choose the first entry.
Find this part and repeat the same steps as above.
Return to the Strings sub-window and search for You no longer have enough
, find exactly this and xref into it.
Scroll up until you found this part, then repeat the same as above.
Return to the Strings sub-window and search for layouts/songselect/start.png
, xref it. After that, find this part and repeat the same steps as above.
Info
Make special charts effects (6 lanes, camera view, green arcs, etc..) work.
AndroidIOSIn the Strings sub-window, search for 9821191
, xref, F5 to open the Pseudocode sub-window and scroll down until you found this:
I. ArcNote (Still wondering what does it do)
Double-click the highlighted address, Alt + T and search 148
. Tab to switch to IDA-View and see something like this:
Click on the LDRB.W
opcode, open the Keypatcher and type nop.w
. Do the same thing with CBZ
opcode but use nop
.
II. Camera
Switch to Pseudocode view, Ctrl + T to search the next value 148
. Tab to switch to IDA-View and see something like this:
Click on the first LDRB.W
opcode, open the Keypatcher and type nop.w
. Do the same thing with BEQ.W
opcode.
III. Scenecontrol
Switch to Pseudocode view, Ctrl + T to search the next value 148
. Tab to switch to IDA-View and see something like this:
Click on the LDRB.W
opcode, open the Keypatcher and type nop.w
. Do the same thing with CBNZ
opcode but use nop
.
IV. Arcahv string check
While at the Scenecontrol in Pseudocode view, scroll down until you see this:
Switch to IDA-View, use the Keypatcher and nop.w
the BEQ.W
opcode.
V. Green arc
Switch to Pseudocode view, scroll down until you found this:
Double-click the highlighted address, switch to IDA-View. Click on LDRB.W
opcode, use the Keypatcher and nop.w
it. After that, use the Keypatcher again to modify the #2
to #10
or any number higher than 3 (3 is white arc but they haven't used it. Not the wide skynote in HIVEMIND -INTERLINKED- ). Do the same thing with the second #2
.
VI. The Switch (this will be used for others as well)
I literally don't know why lowiro do this but ok
In the Strings sub-window, press ALT + T and search for gameend
, double-click, xref and scroll up until you found this:
Double-click the highlighted address, switch to Hex View, F2 to edit and type 4F F0 01
(no spacing) then save it. It should be like this after editing:
Hex View
Before AfterIDA-View
Before AfterVII. Remove Skynote and Arc restrictions (over y2.1)
Note: Not recommended having these 2 modded because it'll mess up a part in Singularity VVVIP. See here: https://youtu.be/3SBjWP2JEXc?t=93.
a. Skynote
Xref The Switch, switch to IDA-View and scroll up a bit until you found this:
Use the Keypatcher and nop.w
it.
b. Arc
In the Pseudocode view, scroll up, xref The Skynote first address, scroll up again, xref the first address, switch to IDA-View, AND scroll down until you see this:
Click the 550.0, switch to Hex View, click the value 80
, press F2 to edit and type ef6749
then save it. It should be like this after editing:
Hex View
Before AfterIDA-View (You'll need to press F5 again to see the magic)
Before AfterAnd there we go! Android is done.
In the Strings sub-window, search for 9821191
, xref, F5 to open the Pseudocode sub-window and scroll down until you found this:
I. ArcNote (Still wondering what does it do)
Double-click the highlighted address, Alt + T and search 264
. Tab to switch to IDA-View and see something like this:
Click on the LDRB
opcode, open the Keypatcher and type nop
. Do the same thing with CBZ
.
II. Camera
Switch to Pseudocode view, Ctrl + T to search the next value 264
. Tab to switch to IDA-View and see something like this:
Click on the first LDRB
opcode, open the Keypatcher and type nop
. Do the same thing with BEQ
opcode.
III. Scenecontrol
Switch to Pseudocode view, Ctrl + T to search the next value 264
. Tab to switch to IDA-View and see something like this:
Click on the LDRB
opcode, open the Keypatcher and type nop
. Do the same thing with CBNZ
opcode.
IV. Arcahv string check
lowiro removed this in iOS and Android arm64 so let's ignore.
V. Green arc
Switch to Pseudocode view, scroll down until you found this:
Double-click the highlighted address, switch to IDA-View. Click on LDRB
opcode that have #0x108
, use the Keypatcher and nop
it. After that, modify the first CMP
opcode to #32
. After that, patch CINC W1, W8, NE
opcode to CINC W1, W1, NE
opcode.
VI. The Switch (this will be used for others as well)
I literally don't know why lowiro do this but ok
In the Strings sub-window, press ALT + T and search for gameend
, double-click, xref and scroll up until you found this:
Double-click the highlighted address, switch to Hex View, F2 to edit and type 20 00 80 52
(no spacing) then save it. It should be like this after editing:
Hex View
Before AfterIDA-View
Before AfterVII. Remove Skynote and Arc restrictions (over y2.1)
Note: Not recommended having these 2 modded because it'll mess up a part in Singularity VVVIP. See here: https://youtu.be/3SBjWP2JEXc?t=93.
a. Skynote
Xref The Switch, switch to IDA-View and scroll up a bit until you found this:
Use the Keypatcher to nop
for the FMOV
and TBZ W20
opcode.
b. Arc
In the Pseudocode view, scroll up, xref The Skynote first address, scroll up again, xref the first address, switch to IDA-View, AND scroll up until you see this:
Click the ADRP
, switch to Hex View, click the second hex byte value, press F2 to edit change a digit then save it (it varies in each version of the game). It should be like this after editing:
Hex View
Before AfterIDA-View
Before AfterAnd there we go! iOS is done.
"},{"location":"offline-mod.html#removing-world-mode-restrictions","title":"Removing world mode restrictions","text":"Info
Unlocks all world mode charts (even byds as well i think because it counts as a world song but it just the visual, you'll need to mod the other 3 to make it playable offline).
AndroidIOSIn the Strings sub-window, search for this song is
, xref the second one, F5 to open the Pseudocode sub-window and scroll up until you found this:
Double-click to go to the highlighted address, click the first line in Pseudocode sub-window, press Tab to move to IDA-View, switch to Hex View, press F2 and type 01 20 70 47
(no spacing) (which is MOV R0, #1 and BX LR).
IDA-View
Before AfterHex View
Before AfterIn the Strings sub-window, search for this song is
, xref the first one, F5 to open the Pseudocode sub-window and scroll up until you found this:
Double-click to go to the highlighted address, click the first line in Pseudocode sub-window, press Tab to move to IDA-View, switch to Hex View, press F2 and type 20 00 80 52 C0 03 5F D6
(no spacing) (which is MOV W0, #1 and RET).
IDA-View
Before AfterHex View
Before AfterOnce you're done, press F2 again to save it.
All done!
And there you have it. Good luck modding. Post-5.4.0 will be written sooner or later.
"},{"location":"private-server.html","title":"Setting up your own Arcaea server","text":"Before starting
Make sure you have dumped Arcaea APK/IPA from your device before proceeding.
"},{"location":"private-server.html#obtaining-content-bundle","title":"Obtaining content bundle","text":"Note
Only for Arcaea 5.4.0+ and non-Chinese versions.
Starting from Arcaea 5.4.0, the game now uses content bundle to deliver base contents such as characters and songs. You must obtain this before proceeding.
Obtaining the content bundle will requires you to install Arcaea once and let it finish downloading the bundle (~491 MB).
Tip
Force quit the game AFTER the content bundle is downloaded (before file verification).
After downloading it, steps to get the files will be different depending on your operating system
For Android, the content bundle is stored in /data/data/moe.low.arc/files
. Root/custom recoveries (e.g. TWRP) is required to access this directory. Shizuku will not work.
For iOS, the content bundle is stored in /var/mobile/Containers/Data/Application/<Arcaea data container ID>/Library/Application Support
. Filza or an unsandboxed file manager is required to access this directory.
Copy the dltemp
folder to your computer. Inside it should contain 2 files with the same filename: one with .bundle and one with .json.
Note
If you had already patched Arcaea, feel free to skip this section and proceed to Setting up private server.
"},{"location":"private-server.html#using-binary-patches","title":"Using Binary Patches","text":"Before starting
You will need a software that allows applying .xdelta
binary patches. DeltaPatcher is used in this guide.
Warning
Android will receive patches for newer versions slower than iOS. As an alternative, try patching it yourself or wait until Android patches is made.
Download the appropriate patch for your version:
iOSAndroid 5.6.3Download
5.6.1Download
5.6.3Download
Now open DeltaPatcher, you will be presented with an interface like this:
Select the appropriate unmodified executable, and the appropriate patch, then press Apply patch.
After that, you are done!
"},{"location":"private-server.html#manual-patching-advanced","title":"Manual patching (Advanced)","text":"Before starting
This section requires basic knowledge of disassembling as well as Googling. You will also need a disassembler with support for ELF/Mach-O arm64 executables and pseudo-code decompilation for this section. IDA Pro is used here.
About NOP
1F 20 03 D5
is the hex equivalent of ARM64 nop
instruction. Overwrite a hex address with it when you want to remove a specific instruction call.
Open the appropriate executable file for your operating system, and wait for the initial auto-analysis to complete (indicated by the status bar at the bottom showing Idle.) This process may take a while depending on your computer so please be patient.
After the initial auto-analysis, Press SHIFT + F12 and wait for the string list to be generated (again, this may take a while.)
iOS & Pre-5.6.3 AndroidAndroid 5.6.3 or newerIn the Strings sub-window, press ALT + T and search for cookieFiIe.txt
until you found exactly this.
Double-click it, and while highlighting this part, press X to perform xref (cross-reference.)
Choose the second xref (for Android) or the only present xref (for iOS) and press ENTER.
Press F5 or View > Open subviews > Generate pseudocode (this will not work if IDA is still analyzing the binary), wait for the decompilation to complete (may take a while) until you see something like this (may differ depending on version used but the general structure should be the same):
Scroll to bottom until you see this part, then highlight it by clicking onto it (names may be different but the structure should remain the same.)
Now switch to the Hex View sub-window, make sure it synchronizes with the Pseudo Code sub-window, and NOP it.
After that, make sure the entire code line is absent when re-decompiled.
Now return to the Strings sub-window, and this time search for vtvtvt
.
xref it, and choose the first xref entry for iOS, or the one with @PAGE
for Android.
Decompile it again, and scroll down a little bit until you see this part:
Highlight this part, and NOP it like above:
Note
This section is a simplified and slightly adjusted version of this guide.
Switch to the IDA View sub-window, and press Alt + I or Search > Immediate value..., a window like this will show up, enter 408
, tick Find all occurrences and then search.
After that, you should see something like this.
Click Instruction to sort it, then scroll up until you found this:
Double-click onto it, then press TAB, F5 or View > Open subviews > Generate pseudo-code and you should see something like this.
Click onto the function name and xref it, choose the only entry in the list.
You will be brought to another function, this time switch back to IDA View and enable synchronization by Right click > Synchronize with > Pseudocode-... After that you should now see something like this, NOP the highlighted part:
Return to the IDA View sub-window, and press Alt + I or Search > Immediate value..., enter 488
, tick Find all occurrences and then search. You will see something like this:
Sort it, then scroll up until you found something like this:
Double-click onto it, and switch to pseudo-code view and it should look like this:
Continue repeating the same steps as above: click onto the function name, xref it, switch to IDA View and nop the BL
instruction.
After patching the executable, save the file and recompress the APK/IPA file. For Android, you must re-sign the APK file before installing it onto your device. You may now transfer and sideload it onto your device using your favorite method.
"},{"location":"private-server.html#setting-up-private-server","title":"Setting up private server","text":"For this section, you will need:
Python 3.6 or newer.
Charles (recommended), Fiddler Classic or any programs that allows redirecting HTTP requests through a proxy.
Time and patience.
Warning
Using any other OSes other than Windows for this may or may not work. You may need to figure stuff out on your own.
First, you need to obtain the server software. We will be using Lost-MSth's Arcaea-server for this purpose. You may obtain it using git
like this git clone https://github.com/Lost-MSth/Arcaea-server -b dev
or by downloading the ZIP file of the dev
branch.
After obtaining the server software, navigate to its directory (<Arcaea-server>/latest version
), and with Python 3.6 or newer installed, run pip install -m requirements.txt
.
From here, certain steps may differ depending on your operating system and the proxy software you picked. We will be using iOS and Charles in this case but the same can also be done for other similarly functioning software.
"},{"location":"private-server.html#proxy-setup","title":"Proxy setup","text":"Open Charles and you will be presented with an interface like this:
Press CTRL + SHIFT + L or Proxy > SSL Proxying Settings and tick the Enable SSL Proxying box. After that, click Add, fill *
for both Host and Port then press OK, after that untick the newly added box. In the end, the SSL Proxying Settings window should look like this:
Close that window, go to Proxy > Proxy Settings and tweak it exactly like this image:
Navigate to the Windows tab and tick all checkboxes:
Close that window, and go to Help > Local IP Addresses. It will look something like this:
Now, ignore everything with \"Virtual\" in it (as those are for Hyper-V, Wi-Fi hotspots or ad-hoc networks, all of which has nothing to do with what we are doing). Check what type of internet connection are you using (either Ethernet or Wi-Fi) and then pick the appropriate adapter. In this case, my computer is connected through Ethernet connection, and it has a Broadcom adapter, I will pick the first one.
About local IP addresses
This IP address is not a public IP address, and therefore cannot be accessed from other networks.
You may now close that window and press CTRL + ALT + M or Tools > Map Remote..., tick Enable Map Remote and press Add. Tweak it like this:
In the Map To section, the Host textbox needs to be your local IP address that you got from above, and the Port textbox is a 4 digit number that your server will be running on. Pick any numbers you want except for common ports like 8888 and the two ports that you have put in when setting up the prory above (both HTTP and SOCKS) and memorize it along with your local IP address. Press OK. The map remote interface should look like this in the end:
You may now close that window. At this point, the proxy is now ready.
"},{"location":"private-server.html#server-software","title":"Server software","text":"The server software directory will look like this:
Copy the config.example.py file into a file named config.py and open it with your favorite text editor.
Most of the config properties should already be self-explanatory. Below is guide for a few important parts.
Remember that local IP address and port that you memorized not long ago? Well enter it here:
HOST is your local IP address and PORT is the port you have choosen earlier.
For GAME_API_PREFIX, this will differ depending on your Arcaea version. Refer to the table below.
Version Prefix 5.5.6 -> 5.6.3/hanami/29
For ALLOW_APPVERSION, remove everything inside. You may add a version to the list (e.g. 5.6.1
) if you want to restrict the server to (a) specific server.
For this part:
If you want to use link play functionality, the only variables you need to care about are LINKPLAY_HOST and LINKPLAY_AUTHENTICATION.
LINKPLAY_HOST needs to be the same as the IP address you have set in the HOST variable earlier unless the SET_LINKPLAY_SERVER_AS_SUB_PROCESS variable is set to False
, at which you will need to specify a separate IP address for the link play server.
For LINKPLAY_AUTHENTICATION, you can leave it as-is or type in anything you want.
If you do not want to use link play functionality, the LINKPLAY_HOST variable needs to be an empty string.
For SSL_CERT and SSL_KEY, if you want to have the server running under HTTPS, you may supply an SSL certificate here if you have one (.pem and .key file).
Warning
Running the server under HTTPS may cause issues with downloading packs/songs.
Adjust the rest of the config file to your own likings. Save the file after finished.
Now go to the database
folder and it will look like this:
Run the database_initialize.py
file to generate the database. Make sure you have installed all dependencies prior to running it in order for it to work. A file named arcaea_database.db
will be created if successful. After that, do all of these:
bundle
folder. The actual bundle must have the .cb
extension and the meta file must have the .json
extension. Both must have the same filename (e.g. 5.6.0
).Note
The content bundle in the server must be the same as the one existing in your Arcaea client (the metadata and content MUST match) as otherwise you will encounter issues when trying to login. If you change the content bundle in the server, the one on the client must be re-downloaded.
To avoid issues, use the content bundle that you have obtained earlier.
songs
folder. Each chart is a folder containing at least 3 .aff files (PST/PRS/FTR difficulties, some may also contain additional .aff files for BYD/ETR difficulties), the base.ogg
file (the song itself), PV video (separated into video and audio files respectively EXCEPT for Arghena which only contains the video in two resolutions 720p and 1080p, one will be downloaded by Arcaea client depending on the graphic setting) and all additional files required by it.Note
When attempting to play a song that is not in the default Arcaea pack, the game will prompt the player to download it from the server. If the chart folder itself or any of the required files are missing, the download will fail. All required files, song, and difficulties are defined in the songlist
file bundled in the content bundle. For more details please refer to the respective Custom Charts & Packs page.
At this point, the server software is now ready.
"},{"location":"private-server.html#on-device-setup","title":"On device setup","text":"Note
Your phone and your computer (the one that runs the server) MUST be connected to the same network for the server to work. If you want to publicize your server, port forwarding or a VPS/cloud serve is required. Setting this up is (at the moment) out of scope for this guide.
iOSAndroidPick one of the methods you want to use.
Using ShadowrocketWi-Fi Proxy SettingsInfo
This is the recommended method; however, it involves using a paid app. Other similarly functioning proxy apps may also work with some configuration. If you do not want to install anything or simply do not wish to use a paid app, considering checking out the Wi-Fi Proxy Settings method instead.
Firstly, install Shadowrocket onto your device.
Now open it, and press on the + icon on the upper right of the interface. Press Type and select Socks5 (without the TLS part). In the Address field, enter your local IP address. In the Port field, enter 8889 (adjust if you have set a different port during proxy setup, specifically, the port for the SOCKS server), press Save while leaving everything else as-is. Press Global Routing and change it to Proxy, return to the main interface and enable the proxy. iOS will prompt you to allow VPN connection, press Allow and authenticate if needed. The VPN
icon will show up on your status bar, indicating that you are now connected to the proxy. Press Connectivity Test to check if the connection is working properly.
Info
The alternative method. Requires re-configuration for new Wi-Fi networks.
Open the Settings app, go to Wi-Fi settings, press the ! icon on the connected network, scroll down until you found the HTTP Proxy settings. In the Configure Proxy settings, select Manual and fill in the Server field which is your local IP address and the Port field which is 8888. Now press Save and (optionally) turn off and reconnect to your Wi-Fi network.
Your device should now be connected to the proxy.
On your computer, return to Charles and go to Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser. A window like this will show up:
Follow the steps listed in it to install the Charles certificate onto your device. You will also need to go to Settings > General > About > Certificate Trust Settings and enable full trust for the newly added certificate for it to take affect.
Go back to Charles and go to Help > SSL Proxying > Save Charles Root Certificate... Save the .pem file somewhere. Rename the .pem extension to .crt. Now transfer this file to your Android device and install it to the VPN & Apps category.
On Android, you will need to rely on a proxifier app such as VProxid or RProxid (requires root, recommended).
After installing either of the proxifier app, open it and press the + icon, for Server IP, enter your local IP address; for Server Port, enter 8889. Scroll down a little bit and press Click to select application(s) then tick Arcaea. Now return and press the play button to start the VPN. Wait until it shows all good.
Now your device is ready to connect to the private server!
Note
Disable the proxy when you have finished playing to prevent connectivity issues. The proxy will need to be re-enabled everytime you want to use the server. A dedicated 24/7 server such as a Raspberry Pi, a spare phone/computer with working shell, or a cloud server (VPS) is recommended for always-on server hosting.
"},{"location":"private-server.html#playing","title":"Playing","text":"Return to the root directory of your server and run the run.bat
file. It may take a while to start depending on the amount of songs you added. If the server console shows this:
Congratulations! Your server is now up and running! Now all that left is open Arcaea and play!
If you see something like this, it means the server is working as intended.
At this point, you are basically done! Enjoy your new server!
"},{"location":"private-server.html#fixes-for-notable-issues","title":"Fixes for notable issues","text":"The game kept prompting to update a pack despite having already downloaded it.
-> Check the song folders to see if they are named correctly and that all files (plus PV videos and audios if exists) are inside.
Cannot download any songs.
-> Make sure the server is running under HTTP connection. For iOS, you may need to edit the Info.plist
file using a plist editor to allow HTTP connection without a jailbreak by setting NSAllowsArbitraryLoads
property to true
.
Nothing works, even logging in.
-> Check if the GAME_API_PREFIX
variable in the config.py
file is set correctly. If that did not work, make sure you have set up the proxy correctly (refer to the Proxy setup and On device proxy setup section.)
Potential system not working.
-> In order to make potential work, you will need to add the charts data onto the server database with the appropriate difficulty constant. Refer to the respective Custom Charts & Packs page for more info.
"}]} \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json index a5f9aef..b840501 100755 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"index.html","title":"Welcome to Arcaea Modding Wiki!","text":"This is a (work-in-progress) centralized wiki for everything Arcaea modding related!
Disclaimer
Everything present in this wiki is made purely for educational and research purposes. By following anything in this wiki, you acknowledge that under no circumstances shall we be held legally responsible or liable for any consequences that may arise from your actions. No proprietary and paid assets, resources and files will be provided and must be individually obtained through official means.
Looking for contributors!
Arcaea Modding Wiki is looking for contributors! The wiki still needs much polishing and improving such as better reference images and such. If you want to contribute, visit the GitHub repository!
"},{"location":"arc-dump.html","title":"Obtaining Arcaea APK/IPA","text":"Work in progress
This page is being actively worked on. Contributions of any kind are much appreciated.
Before proceeding with modding Arcaea, its APK/IPA file must be dumped from your device. Depending on your operating system, dumping procedure will be different.
"},{"location":"arc-dump.html#ios","title":"iOS","text":"Before starting
Either TrollStore or a jailbroken device is required. As a result, you will not be able to perform anything listed in here if you are using any devices that were updated to iOS 16.6.1 or newer and is not checkm8-vulnerable.
Before proceeding, make sure you have Arcaea installed and have opened at least once.
"},{"location":"arc-dump.html#using-trolldecrypt","title":"Using TrollDecrypt","text":"Info
The recommended method. Works for all versions that are supported by TrollStore.
Install TrollDecrypt onto your device using TrollStore, then open it. All apps that can be decrypted will be listed, select Arcaea and choose Yes when prompted. The decryption process will take a while. When it finishes, the resulting IPA will be available form within the app, copy it to your PC and you are done!
"},{"location":"arc-dump.html#using-dumpdecrypter","title":"Using DumpDecrypter","text":"Info
An alternative to TrollDecrypt for devices that is not supported by TrollStore. May not work with rootless jailbreaks (e.g. Dopamine, palera1n).
Open Sileo or any package managers that you like, add this repository: https://repo.tuandb.name.vn
. After that, install DumpDecrypter from it.
Open DumpDecrypter, switch to the Settings tab and enable all available options. Then return to the AppList tab and select Arcaea, press Continue when prompted and wait for the decryption process to complete. Arcaea will automatically open and then close shortly after. When it finishes, press Go to Filza to view (Filza must be installed from the BigBoss repository beforehand) then copy the resulting IPA to your PC and you are done!
"},{"location":"arc-dump.html#android","title":"Android","text":"Work in progress
This section is being worked on.
"},{"location":"custom-charts-packs.html","title":"Adding custom charts/packs","text":"Work in progress
This page is being actively worked on. Contributions of any kind are much appreciated. The content below are unfinished.
Before starting
This guide requires a functional private server already set up and running.
"},{"location":"custom-charts-packs.html#unpacking-the-content-bundle","title":"Unpacking the content bundle","text":"Note
Only for Arcaea 5.4.0 or newer and non-Chinese versions.
"},{"location":"custom-charts-packs.html#songlistpacklist-files","title":"songlist/packlist files","text":""},{"location":"custom-charts-packs.html#private-server-database","title":"Private server database","text":""},{"location":"custom-charts-packs.html#custom-packs","title":"Custom packs","text":""},{"location":"custom-charts-packs.html#custom-charts","title":"Custom charts","text":""},{"location":"custom-charts-packs.html#repacking-the-content-bundle","title":"Repacking the content bundle","text":""},{"location":"offline-mod.html","title":"Reverse Engineering Arcaea","text":"Before starting
This page is being rewritten. There will be no precise ETAs on the completion date.
This guide is NOT beginner-friendly and you will have to figure out a lot of things yourself. Only proceed if you know what you are doing.
"},{"location":"offline-mod.html#removing-hash-verification","title":"Removing hash verification","text":"Info
Allows making changes to the game files. Only for pre-5.4.0 and Chinese versions.
"},{"location":"offline-mod.html#removing-lock-icon","title":"Removing lock icon","text":"Info
Remove the lock icon on locked packs. Purely for aesthetic purposes.
"},{"location":"offline-mod.html#removing-beyond-locks","title":"Removing beyond locks","text":"Info
Allows playing Beyond (BYD) difficulty on charts that have it.
"},{"location":"offline-mod.html#patching-scenecontrol","title":"Patching scenecontrol","text":"Info
Only if you want to experience the April Fools charts to its fullest.
"},{"location":"offline-mod.html#removing-world-mode-restrictions","title":"Removing world mode restrictions","text":"Info
Unlocks all world mode charts.
"},{"location":"private-server.html","title":"Setting up your own Arcaea server","text":"Before starting
Make sure you have dumped Arcaea APK/IPA from your device before proceeding.
"},{"location":"private-server.html#obtaining-content-bundle","title":"Obtaining content bundle","text":"Note
Only for Arcaea 5.4.0+ and non-Chinese versions.
Starting from Arcaea 5.4.0, the game now uses content bundle to deliver base contents such as characters and songs. You must obtain this before proceeding.
Obtaining the content bundle will requires you to install Arcaea once and let it finish downloading the bundle (~491 MB).
Tip
Force quit the game AFTER the content bundle is downloaded (before file verification).
After downloading it, steps to get the files will be different depending on your operating system
For Android, the content bundle is stored in /data/data/moe.low.arc/files
. Root/custom recoveries (e.g. TWRP) is required to access this directory. Shizuku will not work.
For iOS, the content bundle is stored in /var/mobile/Containers/Data/Application/<Arcaea data container ID>/Library/Application Support
. Filza or an unsandboxed file manager is required to access this directory.
Copy the dltemp
folder to your computer. Inside it should contain 2 files with the same filename: one with .bundle and one with .json.
Note
If you had already patched Arcaea, feel free to skip this section and proceed to Setting up private server.
"},{"location":"private-server.html#using-binary-patches","title":"Using Binary Patches","text":"Before starting
You will need a software that allows applying .xdelta
binary patches. DeltaPatcher is used in this guide.
Warning
Android will receive patches for newer versions slower than iOS. As an alternative, try patching it yourself or wait until Android patches is made.
Download the appropriate patch for your version:
iOSAndroid 5.6.3Download
5.6.1Download
5.6.3Being updated, please come back later!
Now open DeltaPatcher, you will be presented with an interface like this:
Select the appropriate unmodified executable, and the appropriate patch, then press Apply patch.
After that, you are done!
"},{"location":"private-server.html#manual-patching-advanced","title":"Manual patching (Advanced)","text":"Before starting
This section requires basic knowledge of disassembling as well as Googling. You will also need a disassembler with support for ELF/Mach-O arm64 executables and pseudo-code decompilation for this section. IDA Pro is used here.
About NOP
1F 20 03 D5
is the hex equivalent of ARM64 nop
instruction. Overwrite a hex address with it when you want to remove a specific instruction call.
Open the appropriate executable file for your operating system, and wait for the initial auto-analysis to complete (indicated by the status bar at the bottom showing Idle.) This process may take a while depending on your computer so please be patient.
After the initial auto-analysis, Press SHIFT + F12 and wait for the string list to be generated (again, this may take a while.)
In the Strings sub-window, press ALT + T and search for cookieFiIe.txt
until you found exactly this.
Double-click it, and while highlighting this part, press X to perform xref (cross-reference.)
Choose the second xref (for Android) or the only present xref (for iOS) and press ENTER.
Press F5 or View > Open subviews > Generate pseudocode (this will not work if IDA is still analyzing the binary), wait for the decompilation to complete (may take a while) until you see something like this (may differ depending on version used but the general structure should be the same):
Scroll to bottom until you see this part, then highlight it by clicking onto it (names may be different but the structure should remain the same.)
Now switch to the Hex View sub-window, make sure it synchronizes with the Pseudo Code sub-window, and NOP it.
After that, make sure the entire code line is absent when re-decompiled.
Now return to the Strings sub-window, and this time search for vtvtvt
.
xref it, and choose the first xref entry for iOS, or the one with @PAGE
for Android.
Decompile it again, and scroll down a little bit until you see this part:
Highlight this part, and NOP it like above:
After that, apply the patches and you are done!
After patching the executable, save the file and recompress the APK/IPA file. For Android, you must resign the APK file before installing it onto your device. You may now sideload it onto your device using ADB, AppSync Unified (not recommended due to potential crashes and issues.), AltStore (& friends) or TrollStore (recommended for supported devices.)
"},{"location":"private-server.html#setting-up-private-server","title":"Setting up private server","text":"For this section, you will need:
Python 3.6 or newer.
Charles (recommended), Fiddler Classic or any programs that allows redirecting HTTP requests through a proxy.
Time and patience.
Warning
Using any other OSes other than Windows for this may or may not work. You may need to figure stuff out on your own.
First, you need to obtain the server software. We will be using Lost-MSth's Arcaea-server for this purpose. You may obtain it using git
like this git clone https://github.com/Lost-MSth/Arcaea-server -b dev
or by downloading the ZIP file of the dev
branch.
After obtaining the server software, navigate to its directory (<Arcaea-server>/latest version
), and with Python 3.6 or newer installed, run pip install -m requirements.txt
.
From here, certain steps may differ depending on your operating system and the proxy software you picked. We will be using iOS and Charles in this case but the same can also be done for other similarly functioning software.
"},{"location":"private-server.html#proxy-setup","title":"Proxy setup","text":"Open Charles and you will be presented with an interface like this:
Press CTRL + SHIFT + L or Proxy > SSL Proxying Settings and tick the Enable SSL Proxying box. After that, click Add, fill *
for both Host and Port then press OK, after that untick the newly added box. In the end, the SSL Proxying Settings window should look like this:
Close that window, go to Proxy > Proxy Settings and tweak it exactly like this image:
Navigate to the Windows tab and tick all checkboxes:
Close that window, and go to Help > Local IP Addresses. It will look something like this:
Your local IP address will most likely be the first item in the list (in this case, since I am using Ethernet connection, it will be the first one.) Copy that IP address or memorize it.
About local IP addresses
This is your local IP address, meaning it can only be accessed by devices that are connected to the same network.
You may now close that window and press CTRL + ALT + M or Tools > Map Remote..., tick Enable Map Remote and press Add. Tweak it like this:
In the Map To section, the Host textbox needs to be your local IP address that you got from above, and the Port textbox is a 4 digit number that your server will be running on. Pick any numbers you want except for ports like 8888 or 8889 and memorize it along with your local IP address. Press OK. The map remote interface should look like this in the end:
You may now close that window. At this point, the proxy is now ready.
"},{"location":"private-server.html#server-software","title":"Server software","text":"The server software directory will look like this:
Copy the config.example.py file into a file named config.py and open it with your favorite text editor.
Most of the config properties should already be self-explanatory. Below is guide for a few important parts.
Remember that local IP address and port that you memorized not long ago? Well enter it here:
HOST is your local IP address and PORT is the port you have choosen earlier.
For GAME_API_PREFIX, this will differ depending on your Arcaea version. Refer to the table below.
Version Prefix 5.5.6 -> 5.6.1/hanami/29
For ALLOW_APPVERSION, remove everything inside. You may add a version to the list (e.g. `5.6.1) if you want to restrict the server to (a) specific server.
For this part:
If you want to use link play functionality, the only variables you need to care about are LINKPLAY_HOST and LINKPLAY_AUTHENTICATION.
LINKPLAY_HOST needs to be the same as the IP address you have set in the HOST variable earlier unless the SET_LINKPLAY_SERVER_AS_SUB_PROCESS variable is set to False
, at which you will need to specify a separate IP address for the link play server.
For LINKPLAY_AUTHENTICATION, you can leave it as-is or type in anything you want.
If you do not want to use link play functionality, the LINKPLAY_HOST variable needs to be an empty string.
For SSL_CERT and SSL_KEY, if you want to have the server running under HTTPS, you may supply an SSL certificate here if you have one (.pem and .key file).
Warning
Running the server under HTTPS may cause issues with downloading packs/songs.
Adjust the rest of the config file to your own likings. Save the file after finished.
Now go to the database
folder and it will look like this:
Run the database_initialize.py
file to generate the database. Make sure you have installed all dependencies prior to running it in order for it to work. A file named arcaea_database.db
will be created if successful. After that, do all of these:
bundle
folder. The actual bundle must have the .cb
extension and the meta file must have the .json
extension. Both must have the same filename (e.g. 5.6.0
).Note
The content bundle in the server must be the same as the one existing in your Arcaea client (the metadata and content MUST match) as otherwise you will encounter issues when trying to login. If you change the content bundle in the server, the one on the client should be redownloaded.
To avoid issues, use the content bundle that you have obtained earlier.
Put any songs you have into the songs
folder. A song is a folder containing multiple .aff files (every difficulties of the song), base.jpg files (the jacket art), the song itself, the PV video for Terminal songs, and any additional files for that song.
Make any adjustments you want to make.
At this point, the server software is now ready.
"},{"location":"private-server.html#on-device-setup","title":"On device setup","text":"Note
Your phone and your computer (the one that runs the server) MUST be connected to the same network for the server to work.
iOSAndroidOpen the Settings app, go to Wi-Fi settings, press the ! icon on the connected network, scroll down until you found the HTTP Proxy settings. In the Configure Proxy settings, select Manual and fill in the Server field which is your local IP address and the Port field which is 8888. Now press Save and (optionally) turn off and reconnect to your Wi-Fi network.
Now on your computer, return to Charles and go to Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser. A window like this will show up:
Follow the steps listed in it to install the Charles certificate onto your device. You will also need to go to Settings > General > About > Certificate Trust Settings and enable full trust for the newly added certificate for it to take affect.
Warning
From limited testing, Android is finicky when it comes to maintaining connection to proxy server. Things may not work correctly or even at all. If you have a way to fix this, feel free to contribute!
Go back to Charles and go to Help > SSL Proxying > Save Charles Root Certificate... Save the .pem file somewhere. Rename the .pem extension to .crt. Now transfer this file to your Android device and install it to both categories.
On Android, you will need to rely on a proxifier app such as VProxid or RProxid (requires root, recommended). You need to connect through the SOCKS5 proxy server.
After installing either of the proxifier app, open it and press the + icon, for Server IP, enter your local IP address; for Server Port, enter 8889. Scroll down a little bit and press Click to select application(s) then tick Arcaea. Now return and press the play button to start the VPN. Wait until it shows all good.
Now your device is ready to connect to the private server!
Note
Disable the proxy when you have finished playing to prevent connectivity issues. The proxy will need to be re-enabled everytime you want to use the server. A dedicated 24/7 server such as a Raspberry Pi, a spare phone/computer with working shell, or a cloud server (VPS) is recommended for always-on server hosting.
"},{"location":"private-server.html#playing","title":"Playing","text":"Return to the root directory of your server and run the run.bat
file. It may take a while to start depending on the amount of songs you added. If the server console shows this:
Congratulations! Your server is now up and running! Now all that left is open Arcaea and play!
If you see something like this, it means the server is working as intended.
At this point, you are basically done! Enjoy your new server!
"},{"location":"private-server.html#fixes-for-notable-issues","title":"Fixes for notable issues","text":"The game kept prompting to update a pack despite having already downloaded it.
-> Check the song folders to see if they are named correctly and that all files (plus PV videos and audios if exists) are inside.
Cannot download any songs.
-> Make sure the server is running under HTTP connection. For iOS, you may need to edit the Info.plist
file using a plist editor to allow HTTP connection without a jailbreak by setting NSAllowsArbitraryLoads
property to true
.
Nothing works, even logging in.
-> Check if the GAME_API_PREFIX
variable in the config.py
file is set correctly. If that did not work, make sure you have set up the proxy correctly (refer to the Proxy setup and On device proxy setup section.)
This is a (work-in-progress) centralized wiki for everything Arcaea modding related!
Disclaimer
Everything present in this wiki is made purely for educational and research purposes. By following anything in this wiki, you acknowledge that under no circumstances shall we be held legally responsible or liable for any consequences that may arise from your actions. No proprietary and paid assets, resources and files will be provided and must be individually obtained through official means.
Looking for contributors!
Arcaea Modding Wiki is looking for contributors! The wiki still needs much polishing and improving such as better reference images and such. If you want to contribute, visit the GitHub repository!
"},{"location":"arc-dump.html","title":"Obtaining Arcaea APK/IPA","text":"Before proceeding with modding Arcaea, its APK/IPA file must be dumped from your device. Depending on your operating system, the procedure will be different.
"},{"location":"arc-dump.html#ios","title":"iOS","text":"Before starting
Either TrollStore or a jailbroken device is required. As a result, you will not be able to perform anything listed in here if you are using any devices that were updated to iOS 16.6.1 or newer and is not checkm8-vulnerable.
Before proceeding, make sure you have Arcaea installed and have opened at least once.
"},{"location":"arc-dump.html#using-trolldecrypt","title":"Using TrollDecrypt","text":"Info
The recommended method. Works for all versions that are supported by TrollStore.
Install TrollDecrypt onto your device using TrollStore, then open it. All apps that can be decrypted will be listed, select Arcaea and choose Yes when prompted. The decryption process will take a while. When it finishes, the resulting IPA will be available form within the app, copy it to your PC and you are done!
"},{"location":"arc-dump.html#using-dumpdecrypter","title":"Using DumpDecrypter","text":"Info
An alternative to TrollDecrypt for devices that is not supported by TrollStore. May not work with rootless jailbreaks (e.g. Dopamine, palera1n).
Open Sileo or any package managers that you like, add this repository: https://repo.tuandb.name.vn
. After that, install DumpDecrypter from it.
Open DumpDecrypter, switch to the Settings tab and enable all available options. Then return to the AppList tab and select Arcaea, press Continue when prompted and wait for the decryption process to complete. Arcaea will automatically open and then close shortly after. When it finishes, press Go to Filza to view (Filza must be installed from the BigBoss repository beforehand) then copy the resulting IPA to your PC and you are done!
"},{"location":"arc-dump.html#android","title":"Android","text":"Info
Requires ADB (Android Debug Bridge) and appropriate ADB/USB drivers for your phone (not required on Linux, Windows 10 or newer will most likely do this automatically for you) installed which is included in the Android SDK by default. If you do not want to install the entire platform SDK, consider installing this.
"},{"location":"arc-dump.html#dumping-split-apks","title":"Dumping split APKs","text":"Open Command Prompt or your favorite Terminal Emulator, then with your phone connected to your PC via USB, run adb shell pm path moe.low.arc
to fetch all paths to Arcaea APKs, it should look like this:
This is called split APKs, a new simplified APK format that split an APK file to multiple smaller APKs (e.g. one APK containing the base data, one containing the actual code, one containing assets and so on...). Normally, this format will help for more efficient application installation from Google Play due to not requiring to download a huge APK file; however, this will make it hard to mod Arcaea, so we must merge them into a normal APK file before proceeding.
Copy the path of each APK files, and run adb pull <path to apk>
. Repeat this for the other APKs too.
Info
A tool called SAP (Split APKs Package) will be used for this purpose. You may also be able to use any other similar functioning tools as well.
Download and open SAP, you will be presented with an interface like this:
Place all of your split APKs into a folder, then click onto Directory and select that folder. If however you have a XAPK file instead, click on Archive and select that XAPK file.
Make sure to tick the Sign checkbox, then click Start and wait as this may take a while.
"},{"location":"custom-charts-packs.html","title":"Adding your own charts/packs/etc...","text":"Work in progress
This page is being worked on. Contributions of any kind are much appreciated.
Before starting
This guide requires a functional private server already set up and running. For more details please refer to the Private Server page.
"},{"location":"custom-charts-packs.html#the-content-bundle","title":"The content bundle","text":"Note
Only for Arcaea 5.4.0 or newer and non-Chinese versions.
"},{"location":"custom-charts-packs.html#the-apkipa-file","title":"The APK/IPA file","text":"Danger
Only for Arcaea 5.3.1 or older and Chinese versions (e.g. 5.6.3c). Requires removing hash protection before modification can be done. Refer to the respective Reverse Engineering page for more details.
"},{"location":"custom-charts-packs.html#meta-files","title":"Meta files","text":""},{"location":"custom-charts-packs.html#server-database","title":"Server database","text":""},{"location":"custom-charts-packs.html#custom-packs","title":"Custom packs","text":""},{"location":"custom-charts-packs.html#custom-charts","title":"Custom charts","text":""},{"location":"custom-charts-packs.html#custom-courses","title":"Custom courses","text":""},{"location":"custom-charts-packs.html#custom-world-mode-maps","title":"Custom world mode maps","text":""},{"location":"offline-mod.html","title":"Reverse Engineering Arcaea","text":"Before starting
This page is being actively worked on. Content shown below may be unfinished, unpolished, out of date, or inaccurate.
This guide is NOT beginner-friendly and you will have to figure out a lot of things yourself. Only proceed if you know what you are doing.
About modifying instructions/NOPing
A frequent thing you will be told to do throughout this guide is to NOP or edit an instruction. There are two main ways of doing so:
Overwriting its hex address using a hex editor. This will requires a converter that allows converting ARM instruction to hex address and vice versa. As with NOPing an instruction, overwrite its hex address with 1F 20 03 D5
for ARM64 or 00 F0 20 E3
for ARM32. This is the recommended method.
Using Keypatch. This is the simplest method to directly modifying an instruction without having to touch the hex editor. Unfortunately, Keypatch has not been updated to IDA Pro 8.x (yet), and even with older versions of IDA Pro setting it up and get it to work can be quite a pain.
Info
Allows making changes to the game files. Only for pre-5.4.0 and Chinese versions.
In the Functions sub-window on the left, right click on Function name and choose Quick filter, then search for .exit
(Android) or _exit
(iOS).
Double-click onto it, and on the IDA View sub-window, press SPACE to switch to graph view. You will be presented with something like this, click onto the highlighted button to bring up the xref (cross-reference) window.
Choose the first (Android) or second (iOS) xref entry.
Note
In case neither of entries contains what is shown below, trying looking at other entries too. Please do note that if you are modding a version of Arcaea that uses content bundle (5.4.0+), you will not be able to find it as it does not exist.
iOSAndroidThere are 9 xref entries consisting of 6 B.NE and 3 CBNZ instructions, NOP all of them until there are none left.
There are 6 xref entries consisting of 3 B.NE and 3 CBNZ instructions, NOP all of them until there are none left.
"},{"location":"offline-mod.html#removing-lock-icon","title":"Removing lock icon","text":"Info
Remove the lock icon on locked packs. Purely for aesthetic purposes.
Press SHIFT + F12, then ALT + T and search for lock_icon
. Double-click onto it and xref it. After that, press TAB or F5 to view its pseudo-code, you will see something like this:
Find this structure and highlight v132
(name may be different), then xref it, Choose the first entry.
Double-click onto the function call to view its pseudo-code. Focus on this part.
Highlight it then switch back to the IDA View sub-window. With synchronization enabled, modify MOV W8, 0
to MOV W8, 1
. Repeat this for both of the variables. After doing so, all v3
variables should have 1
as its value.
Info
Allows playing Beyond (BYD) difficulty on charts that have it.
AndroidiOSI. Remove network required for playing beyond
Go to Strings sub-window, Alt + T to search for You no longer
string, double-click, xref the string, scroll up until you find the SUBS
opcode like this in the image:
Open the Keypatcher (Ctrl + Alt + K), modify the #3
to #5
and press Enter.
II. Display Beyond difficulty
Go to Strings sub-window, Alt + T to search for songs/songlist
string, double-click, xref the first string, press Alt + T and type temp
until you found this:
Click the CMP
opcode and open the Keypatcher, modify the #3
to #5
and press Enter.
III. Display the Start button
Go to Strings sub-window, Alt + T to search for start.png
string, double-click, xref the string and find the SUBS
opcode like this in the image:
Click the SUBS
opcode and open the Keypatcher, modify the #3
to #5
and press Enter.
IV. Scan 3.aff in the apk
Go to Strings sub-window, Alt + T to search for songs/songlist
string, scroll up a bit to find the dl_
string, xref the string until you found like this:
Click the CMP
opcode and open the Keypatcher, modify the #3
to #5
and press Enter.
And you're done with Android!
Press SHIFT + F12, then ALT + T and search for world_unlock
. Continue doing so until you found exactly this:
Double-click onto it and xref it. Choose the last entry.
Scroll down a little bit until you found this.
Change CMP W8, #3
to CMP W8, #5
.
While on the IDA View sub-window, press ALT + T and search for dl_
, tick Find all occurrences and then search. Wait patiently until it completes.
Choose the first entry.
Find this part and repeat the same steps as above.
Return to the Strings sub-window and search for You no longer have enough
, find exactly this and xref into it.
Scroll up until you found this part, then repeat the same as above.
Return to the Strings sub-window and search for layouts/songselect/start.png
, xref it. After that, find this part and repeat the same steps as above.
Info
Make special charts effects (6 lanes, camera view, green arcs, etc..) work.
AndroidIOSIn the Strings sub-window, search for 9821191
, xref, F5 to open the Pseudocode sub-window and scroll down until you found this:
I. ArcNote (Still wondering what does it do)
Double-click the highlighted address, Alt + T and search 148
. Tab to switch to IDA-View and see something like this:
Click on the LDRB.W
opcode, open the Keypatcher and type nop.w
. Do the same thing with CBZ
opcode but use nop
.
II. Camera
Switch to Pseudocode view, Ctrl + T to search the next value 148
. Tab to switch to IDA-View and see something like this:
Click on the first LDRB.W
opcode, open the Keypatcher and type nop.w
. Do the same thing with BEQ.W
opcode.
III. Scenecontrol
Switch to Pseudocode view, Ctrl + T to search the next value 148
. Tab to switch to IDA-View and see something like this:
Click on the LDRB.W
opcode, open the Keypatcher and type nop.w
. Do the same thing with CBNZ
opcode but use nop
.
IV. Arcahv string check
While at the Scenecontrol in Pseudocode view, scroll down until you see this:
Switch to IDA-View, use the Keypatcher and nop.w
the BEQ.W
opcode.
V. Green arc
Switch to Pseudocode view, scroll down until you found this:
Double-click the highlighted address, switch to IDA-View. Click on LDRB.W
opcode, use the Keypatcher and nop.w
it. After that, use the Keypatcher again to modify the #2
to #10
or any number higher than 3 (3 is white arc but they haven't used it. Not the wide skynote in HIVEMIND -INTERLINKED- ). Do the same thing with the second #2
.
VI. The Switch (this will be used for others as well)
I literally don't know why lowiro do this but ok
In the Strings sub-window, press ALT + T and search for gameend
, double-click, xref and scroll up until you found this:
Double-click the highlighted address, switch to Hex View, F2 to edit and type 4F F0 01
(no spacing) then save it. It should be like this after editing:
Hex View
Before AfterIDA-View
Before AfterVII. Remove Skynote and Arc restrictions (over y2.1)
Note: Not recommended having these 2 modded because it'll mess up a part in Singularity VVVIP. See here: https://youtu.be/3SBjWP2JEXc?t=93.
a. Skynote
Xref The Switch, switch to IDA-View and scroll up a bit until you found this:
Use the Keypatcher and nop.w
it.
b. Arc
In the Pseudocode view, scroll up, xref The Skynote first address, scroll up again, xref the first address, switch to IDA-View, AND scroll down until you see this:
Click the 550.0, switch to Hex View, click the value 80
, press F2 to edit and type ef6749
then save it. It should be like this after editing:
Hex View
Before AfterIDA-View (You'll need to press F5 again to see the magic)
Before AfterAnd there we go! Android is done.
In the Strings sub-window, search for 9821191
, xref, F5 to open the Pseudocode sub-window and scroll down until you found this:
I. ArcNote (Still wondering what does it do)
Double-click the highlighted address, Alt + T and search 264
. Tab to switch to IDA-View and see something like this:
Click on the LDRB
opcode, open the Keypatcher and type nop
. Do the same thing with CBZ
.
II. Camera
Switch to Pseudocode view, Ctrl + T to search the next value 264
. Tab to switch to IDA-View and see something like this:
Click on the first LDRB
opcode, open the Keypatcher and type nop
. Do the same thing with BEQ
opcode.
III. Scenecontrol
Switch to Pseudocode view, Ctrl + T to search the next value 264
. Tab to switch to IDA-View and see something like this:
Click on the LDRB
opcode, open the Keypatcher and type nop
. Do the same thing with CBNZ
opcode.
IV. Arcahv string check
lowiro removed this in iOS and Android arm64 so let's ignore.
V. Green arc
Switch to Pseudocode view, scroll down until you found this:
Double-click the highlighted address, switch to IDA-View. Click on LDRB
opcode that have #0x108
, use the Keypatcher and nop
it. After that, modify the first CMP
opcode to #32
. After that, patch CINC W1, W8, NE
opcode to CINC W1, W1, NE
opcode.
VI. The Switch (this will be used for others as well)
I literally don't know why lowiro do this but ok
In the Strings sub-window, press ALT + T and search for gameend
, double-click, xref and scroll up until you found this:
Double-click the highlighted address, switch to Hex View, F2 to edit and type 20 00 80 52
(no spacing) then save it. It should be like this after editing:
Hex View
Before AfterIDA-View
Before AfterVII. Remove Skynote and Arc restrictions (over y2.1)
Note: Not recommended having these 2 modded because it'll mess up a part in Singularity VVVIP. See here: https://youtu.be/3SBjWP2JEXc?t=93.
a. Skynote
Xref The Switch, switch to IDA-View and scroll up a bit until you found this:
Use the Keypatcher to nop
for the FMOV
and TBZ W20
opcode.
b. Arc
In the Pseudocode view, scroll up, xref The Skynote first address, scroll up again, xref the first address, switch to IDA-View, AND scroll up until you see this:
Click the ADRP
, switch to Hex View, click the second hex byte value, press F2 to edit change a digit then save it (it varies in each version of the game). It should be like this after editing:
Hex View
Before AfterIDA-View
Before AfterAnd there we go! iOS is done.
"},{"location":"offline-mod.html#removing-world-mode-restrictions","title":"Removing world mode restrictions","text":"Info
Unlocks all world mode charts (even byds as well i think because it counts as a world song but it just the visual, you'll need to mod the other 3 to make it playable offline).
AndroidIOSIn the Strings sub-window, search for this song is
, xref the second one, F5 to open the Pseudocode sub-window and scroll up until you found this:
Double-click to go to the highlighted address, click the first line in Pseudocode sub-window, press Tab to move to IDA-View, switch to Hex View, press F2 and type 01 20 70 47
(no spacing) (which is MOV R0, #1 and BX LR).
IDA-View
Before AfterHex View
Before AfterIn the Strings sub-window, search for this song is
, xref the first one, F5 to open the Pseudocode sub-window and scroll up until you found this:
Double-click to go to the highlighted address, click the first line in Pseudocode sub-window, press Tab to move to IDA-View, switch to Hex View, press F2 and type 20 00 80 52 C0 03 5F D6
(no spacing) (which is MOV W0, #1 and RET).
IDA-View
Before AfterHex View
Before AfterOnce you're done, press F2 again to save it.
All done!
And there you have it. Good luck modding. Post-5.4.0 will be written sooner or later.
"},{"location":"private-server.html","title":"Setting up your own Arcaea server","text":"Before starting
Make sure you have dumped Arcaea APK/IPA from your device before proceeding.
"},{"location":"private-server.html#obtaining-content-bundle","title":"Obtaining content bundle","text":"Note
Only for Arcaea 5.4.0+ and non-Chinese versions.
Starting from Arcaea 5.4.0, the game now uses content bundle to deliver base contents such as characters and songs. You must obtain this before proceeding.
Obtaining the content bundle will requires you to install Arcaea once and let it finish downloading the bundle (~491 MB).
Tip
Force quit the game AFTER the content bundle is downloaded (before file verification).
After downloading it, steps to get the files will be different depending on your operating system
For Android, the content bundle is stored in /data/data/moe.low.arc/files
. Root/custom recoveries (e.g. TWRP) is required to access this directory. Shizuku will not work.
For iOS, the content bundle is stored in /var/mobile/Containers/Data/Application/<Arcaea data container ID>/Library/Application Support
. Filza or an unsandboxed file manager is required to access this directory.
Copy the dltemp
folder to your computer. Inside it should contain 2 files with the same filename: one with .bundle and one with .json.
Note
If you had already patched Arcaea, feel free to skip this section and proceed to Setting up private server.
"},{"location":"private-server.html#using-binary-patches","title":"Using Binary Patches","text":"Before starting
You will need a software that allows applying .xdelta
binary patches. DeltaPatcher is used in this guide.
Warning
Android will receive patches for newer versions slower than iOS. As an alternative, try patching it yourself or wait until Android patches is made.
Download the appropriate patch for your version:
iOSAndroid 5.6.3Download
5.6.1Download
5.6.3Download
Now open DeltaPatcher, you will be presented with an interface like this:
Select the appropriate unmodified executable, and the appropriate patch, then press Apply patch.
After that, you are done!
"},{"location":"private-server.html#manual-patching-advanced","title":"Manual patching (Advanced)","text":"Before starting
This section requires basic knowledge of disassembling as well as Googling. You will also need a disassembler with support for ELF/Mach-O arm64 executables and pseudo-code decompilation for this section. IDA Pro is used here.
About NOP
1F 20 03 D5
is the hex equivalent of ARM64 nop
instruction. Overwrite a hex address with it when you want to remove a specific instruction call.
Open the appropriate executable file for your operating system, and wait for the initial auto-analysis to complete (indicated by the status bar at the bottom showing Idle.) This process may take a while depending on your computer so please be patient.
After the initial auto-analysis, Press SHIFT + F12 and wait for the string list to be generated (again, this may take a while.)
iOS & Pre-5.6.3 AndroidAndroid 5.6.3 or newerIn the Strings sub-window, press ALT + T and search for cookieFiIe.txt
until you found exactly this.
Double-click it, and while highlighting this part, press X to perform xref (cross-reference.)
Choose the second xref (for Android) or the only present xref (for iOS) and press ENTER.
Press F5 or View > Open subviews > Generate pseudocode (this will not work if IDA is still analyzing the binary), wait for the decompilation to complete (may take a while) until you see something like this (may differ depending on version used but the general structure should be the same):
Scroll to bottom until you see this part, then highlight it by clicking onto it (names may be different but the structure should remain the same.)
Now switch to the Hex View sub-window, make sure it synchronizes with the Pseudo Code sub-window, and NOP it.
After that, make sure the entire code line is absent when re-decompiled.
Now return to the Strings sub-window, and this time search for vtvtvt
.
xref it, and choose the first xref entry for iOS, or the one with @PAGE
for Android.
Decompile it again, and scroll down a little bit until you see this part:
Highlight this part, and NOP it like above:
Note
This section is a simplified and slightly adjusted version of this guide.
Switch to the IDA View sub-window, and press Alt + I or Search > Immediate value..., a window like this will show up, enter 408
, tick Find all occurrences and then search.
After that, you should see something like this.
Click Instruction to sort it, then scroll up until you found this:
Double-click onto it, then press TAB, F5 or View > Open subviews > Generate pseudo-code and you should see something like this.
Click onto the function name and xref it, choose the only entry in the list.
You will be brought to another function, this time switch back to IDA View and enable synchronization by Right click > Synchronize with > Pseudocode-... After that you should now see something like this, NOP the highlighted part:
Return to the IDA View sub-window, and press Alt + I or Search > Immediate value..., enter 488
, tick Find all occurrences and then search. You will see something like this:
Sort it, then scroll up until you found something like this:
Double-click onto it, and switch to pseudo-code view and it should look like this:
Continue repeating the same steps as above: click onto the function name, xref it, switch to IDA View and nop the BL
instruction.
After patching the executable, save the file and recompress the APK/IPA file. For Android, you must re-sign the APK file before installing it onto your device. You may now transfer and sideload it onto your device using your favorite method.
"},{"location":"private-server.html#setting-up-private-server","title":"Setting up private server","text":"For this section, you will need:
Python 3.6 or newer.
Charles (recommended), Fiddler Classic or any programs that allows redirecting HTTP requests through a proxy.
Time and patience.
Warning
Using any other OSes other than Windows for this may or may not work. You may need to figure stuff out on your own.
First, you need to obtain the server software. We will be using Lost-MSth's Arcaea-server for this purpose. You may obtain it using git
like this git clone https://github.com/Lost-MSth/Arcaea-server -b dev
or by downloading the ZIP file of the dev
branch.
After obtaining the server software, navigate to its directory (<Arcaea-server>/latest version
), and with Python 3.6 or newer installed, run pip install -m requirements.txt
.
From here, certain steps may differ depending on your operating system and the proxy software you picked. We will be using iOS and Charles in this case but the same can also be done for other similarly functioning software.
"},{"location":"private-server.html#proxy-setup","title":"Proxy setup","text":"Open Charles and you will be presented with an interface like this:
Press CTRL + SHIFT + L or Proxy > SSL Proxying Settings and tick the Enable SSL Proxying box. After that, click Add, fill *
for both Host and Port then press OK, after that untick the newly added box. In the end, the SSL Proxying Settings window should look like this:
Close that window, go to Proxy > Proxy Settings and tweak it exactly like this image:
Navigate to the Windows tab and tick all checkboxes:
Close that window, and go to Help > Local IP Addresses. It will look something like this:
Now, ignore everything with \"Virtual\" in it (as those are for Hyper-V, Wi-Fi hotspots or ad-hoc networks, all of which has nothing to do with what we are doing). Check what type of internet connection are you using (either Ethernet or Wi-Fi) and then pick the appropriate adapter. In this case, my computer is connected through Ethernet connection, and it has a Broadcom adapter, I will pick the first one.
About local IP addresses
This IP address is not a public IP address, and therefore cannot be accessed from other networks.
You may now close that window and press CTRL + ALT + M or Tools > Map Remote..., tick Enable Map Remote and press Add. Tweak it like this:
In the Map To section, the Host textbox needs to be your local IP address that you got from above, and the Port textbox is a 4 digit number that your server will be running on. Pick any numbers you want except for common ports like 8888 and the two ports that you have put in when setting up the prory above (both HTTP and SOCKS) and memorize it along with your local IP address. Press OK. The map remote interface should look like this in the end:
You may now close that window. At this point, the proxy is now ready.
"},{"location":"private-server.html#server-software","title":"Server software","text":"The server software directory will look like this:
Copy the config.example.py file into a file named config.py and open it with your favorite text editor.
Most of the config properties should already be self-explanatory. Below is guide for a few important parts.
Remember that local IP address and port that you memorized not long ago? Well enter it here:
HOST is your local IP address and PORT is the port you have choosen earlier.
For GAME_API_PREFIX, this will differ depending on your Arcaea version. Refer to the table below.
Version Prefix 5.5.6 -> 5.6.3/hanami/29
For ALLOW_APPVERSION, remove everything inside. You may add a version to the list (e.g. 5.6.1
) if you want to restrict the server to (a) specific server.
For this part:
If you want to use link play functionality, the only variables you need to care about are LINKPLAY_HOST and LINKPLAY_AUTHENTICATION.
LINKPLAY_HOST needs to be the same as the IP address you have set in the HOST variable earlier unless the SET_LINKPLAY_SERVER_AS_SUB_PROCESS variable is set to False
, at which you will need to specify a separate IP address for the link play server.
For LINKPLAY_AUTHENTICATION, you can leave it as-is or type in anything you want.
If you do not want to use link play functionality, the LINKPLAY_HOST variable needs to be an empty string.
For SSL_CERT and SSL_KEY, if you want to have the server running under HTTPS, you may supply an SSL certificate here if you have one (.pem and .key file).
Warning
Running the server under HTTPS may cause issues with downloading packs/songs.
Adjust the rest of the config file to your own likings. Save the file after finished.
Now go to the database
folder and it will look like this:
Run the database_initialize.py
file to generate the database. Make sure you have installed all dependencies prior to running it in order for it to work. A file named arcaea_database.db
will be created if successful. After that, do all of these:
bundle
folder. The actual bundle must have the .cb
extension and the meta file must have the .json
extension. Both must have the same filename (e.g. 5.6.0
).Note
The content bundle in the server must be the same as the one existing in your Arcaea client (the metadata and content MUST match) as otherwise you will encounter issues when trying to login. If you change the content bundle in the server, the one on the client must be re-downloaded.
To avoid issues, use the content bundle that you have obtained earlier.
songs
folder. Each chart is a folder containing at least 3 .aff files (PST/PRS/FTR difficulties, some may also contain additional .aff files for BYD/ETR difficulties), the base.ogg
file (the song itself), PV video (separated into video and audio files respectively EXCEPT for Arghena which only contains the video in two resolutions 720p and 1080p, one will be downloaded by Arcaea client depending on the graphic setting) and all additional files required by it.Note
When attempting to play a song that is not in the default Arcaea pack, the game will prompt the player to download it from the server. If the chart folder itself or any of the required files are missing, the download will fail. All required files, song, and difficulties are defined in the songlist
file bundled in the content bundle. For more details please refer to the respective Custom Charts & Packs page.
At this point, the server software is now ready.
"},{"location":"private-server.html#on-device-setup","title":"On device setup","text":"Note
Your phone and your computer (the one that runs the server) MUST be connected to the same network for the server to work. If you want to publicize your server, port forwarding or a VPS/cloud serve is required. Setting this up is (at the moment) out of scope for this guide.
iOSAndroidPick one of the methods you want to use.
Using ShadowrocketWi-Fi Proxy SettingsInfo
This is the recommended method; however, it involves using a paid app. Other similarly functioning proxy apps may also work with some configuration. If you do not want to install anything or simply do not wish to use a paid app, considering checking out the Wi-Fi Proxy Settings method instead.
Firstly, install Shadowrocket onto your device.
Now open it, and press on the + icon on the upper right of the interface. Press Type and select Socks5 (without the TLS part). In the Address field, enter your local IP address. In the Port field, enter 8889 (adjust if you have set a different port during proxy setup, specifically, the port for the SOCKS server), press Save while leaving everything else as-is. Press Global Routing and change it to Proxy, return to the main interface and enable the proxy. iOS will prompt you to allow VPN connection, press Allow and authenticate if needed. The VPN
icon will show up on your status bar, indicating that you are now connected to the proxy. Press Connectivity Test to check if the connection is working properly.
Info
The alternative method. Requires re-configuration for new Wi-Fi networks.
Open the Settings app, go to Wi-Fi settings, press the ! icon on the connected network, scroll down until you found the HTTP Proxy settings. In the Configure Proxy settings, select Manual and fill in the Server field which is your local IP address and the Port field which is 8888. Now press Save and (optionally) turn off and reconnect to your Wi-Fi network.
Your device should now be connected to the proxy.
On your computer, return to Charles and go to Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser. A window like this will show up:
Follow the steps listed in it to install the Charles certificate onto your device. You will also need to go to Settings > General > About > Certificate Trust Settings and enable full trust for the newly added certificate for it to take affect.
Go back to Charles and go to Help > SSL Proxying > Save Charles Root Certificate... Save the .pem file somewhere. Rename the .pem extension to .crt. Now transfer this file to your Android device and install it to the VPN & Apps category.
On Android, you will need to rely on a proxifier app such as VProxid or RProxid (requires root, recommended).
After installing either of the proxifier app, open it and press the + icon, for Server IP, enter your local IP address; for Server Port, enter 8889. Scroll down a little bit and press Click to select application(s) then tick Arcaea. Now return and press the play button to start the VPN. Wait until it shows all good.
Now your device is ready to connect to the private server!
Note
Disable the proxy when you have finished playing to prevent connectivity issues. The proxy will need to be re-enabled everytime you want to use the server. A dedicated 24/7 server such as a Raspberry Pi, a spare phone/computer with working shell, or a cloud server (VPS) is recommended for always-on server hosting.
"},{"location":"private-server.html#playing","title":"Playing","text":"Return to the root directory of your server and run the run.bat
file. It may take a while to start depending on the amount of songs you added. If the server console shows this:
Congratulations! Your server is now up and running! Now all that left is open Arcaea and play!
If you see something like this, it means the server is working as intended.
At this point, you are basically done! Enjoy your new server!
"},{"location":"private-server.html#fixes-for-notable-issues","title":"Fixes for notable issues","text":"The game kept prompting to update a pack despite having already downloaded it.
-> Check the song folders to see if they are named correctly and that all files (plus PV videos and audios if exists) are inside.
Cannot download any songs.
-> Make sure the server is running under HTTP connection. For iOS, you may need to edit the Info.plist
file using a plist editor to allow HTTP connection without a jailbreak by setting NSAllowsArbitraryLoads
property to true
.
Nothing works, even logging in.
-> Check if the GAME_API_PREFIX
variable in the config.py
file is set correctly. If that did not work, make sure you have set up the proxy correctly (refer to the Proxy setup and On device proxy setup section.)
Potential system not working.
-> In order to make potential work, you will need to add the charts data onto the server database with the appropriate difficulty constant. Refer to the respective Custom Charts & Packs page for more info.
"}]} \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index c01a43fb8ab56d6acca8a24ffffecd23cf7e68ff..4c7bb4ecedbe2633ca6ea847e34785f3da455e21 100755 GIT binary patch delta 13 Ucmb=gXP58h;1G}un#f)O02i