174 Commits

Author SHA1 Message Date
Azalea
c7e493d7f5 [F] Fix null 2024-02-26 17:05:32 -05:00
Azalea
759519d374 [PR] #13 from Becods: Extra fields from bud
[+] Extra fields from bud
2024-02-26 10:40:14 -05:00
Becod
3d713b13da [+] Extra fields from bud 2024-02-26 21:42:00 +08:00
Azalea
20468e612d Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-23 00:11:05 -05:00
Azalea
c175173821 Merge pull request #12 from Zaphkito/master
Add maimai 140 h041 event data
2024-02-21 05:46:55 -05:00
zaphkito
52e9285551 Add maimai 140 h041 event data 2024-02-21 18:39:39 +08:00
Azalea
f4280c0768 Merge pull request #11 from Zaphkito/master
Maimai 140 h031 event data and charge data
2024-02-18 15:57:25 -05:00
zaphkito
295ae14658 Add maimai2 charge 2024-02-19 04:40:48 +08:00
zaphkito
ccc2bcffce Maimai 140 h031 event data 2024-02-19 04:12:53 +08:00
Azalea
a47ed71799 [F] Fix typos in readme 2024-02-16 20:49:44 -08:00
Azalea
006a49cfdb [F] Fix dependency CVE 2024-02-16 15:54:09 -05:00
Azalea
9794ee259a [U] Upgrade gradle wrapper 2024-02-16 15:52:05 -05:00
Azalea
643e0e0c1f [O] Lint 2024-02-16 01:46:11 -05:00
Azalea
6afcb364d1 [+] Add eslint 2024-02-16 01:43:32 -05:00
Azalea
6d4a38404c [O] Sort recent by date, display level 2024-02-16 01:04:29 -05:00
Azalea
b925c2ef20 [U] Update readme 2024-02-12 11:26:37 -05:00
Azalea
e3f931d4f5 [PR] #10 from afonsopbarros: Update readme
Update AquaiMai README
2024-02-12 09:45:24 -05:00
Afonso
01b5d63972 Update AquaiMai README 2024-02-12 12:50:01 +01:00
Azalea
97794ce7c5 [S] Responsive chart 2024-02-12 04:49:02 -05:00
Azalea
ac4c66a1f7 [S] Fix home page 2024-02-12 04:48:51 -05:00
Azalea
9750e26d4b [F] Fix height 2024-02-12 04:35:02 -05:00
Azalea
4b14412190 Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-12 04:33:39 -05:00
Azalea
207c2e10e3 [F] Fix height 2024-02-12 04:33:35 -05:00
Azalea
7c73515427 [U] Add related projects 2024-02-12 00:49:07 -08:00
Azalea
aea7108940 [U] Yarn upgrade 2024-02-12 03:38:34 -05:00
Azalea
2bdd97d889 [O] Center page 2024-02-12 03:38:25 -05:00
Azalea
93b6dd3374 [S] Fix song name overflow 2024-02-12 03:20:09 -05:00
Azalea
bf3c123658 [S] Mobile 2024-02-12 03:03:07 -05:00
Azalea
06c0a361fd [S] Good color 2024-02-12 03:00:24 -05:00
Azalea
92510845d6 [S] Style recent 2024-02-12 03:00:16 -05:00
Azalea
8ab57859f6 [S] mobile 2024-02-12 03:00:07 -05:00
Azalea
0608b50193 [+] Display recent scores 2024-02-12 02:59:46 -05:00
Azalea
e14ff26915 [+] UI helper for class 2024-02-12 02:59:33 -05:00
Azalea
8932a16468 [O] Encapsulate all music 2024-02-12 02:59:25 -05:00
Azalea
3804db142f [S] Style UserHome 2024-02-12 02:04:25 -05:00
Azalea
7e198bd7a1 [+] Display more info on user page 2024-02-12 01:48:28 -05:00
Azalea
85301c92ec [O] Import font 2024-02-12 01:48:08 -05:00
Azalea
2ca6be77ed [+] Add summary to SDK 2024-02-12 01:23:32 -05:00
Azalea
48558bec0f [+] Even more info 2024-02-12 01:11:20 -05:00
Azalea
31af8669b5 [O] More info 2024-02-12 01:05:15 -05:00
Azalea
d716ee5d26 [O] Optimize query 2024-02-12 01:02:02 -05:00
Azalea
8e1c07d530 [+] maimai user summary 2024-02-12 00:53:20 -05:00
Azalea
0d7b52aadc [+] Sinmai dev notes 2024-02-11 23:30:15 -05:00
Azalea
25eb99f014 [O] Hide chartjs lables 2024-02-11 22:53:31 -05:00
Azalea
ab8276df2f [S] Style chartjs 2024-02-11 22:40:12 -05:00
Azalea
68569ad875 [O] Externalize cal heatmap 2024-02-11 22:40:04 -05:00
Azalea
c0e77d9eec [O] Switch to cal-heatmap 2024-02-11 22:32:10 -05:00
Azalea
27297c5d24 [O] Write readme 2024-02-10 06:43:01 -05:00
Azalea
b6a7a02b23 [+] Home view 2024-02-10 06:31:11 -05:00
Azalea
534e20a072 [+] Helper to register chartjs 2024-02-10 06:30:50 -05:00
Azalea
9478da81a9 [+] Maimai api endpoints 2024-02-10 06:30:22 -05:00
Azalea
ee958f20d2 [+] Declare user preview data type 2024-02-10 06:30:15 -05:00
Azalea
00edf44828 [+] Type declaration 2024-02-10 06:27:58 -05:00
Azalea
f3a49533fd [+] Add ChartJS, heatmap dependencies 2024-02-10 06:27:49 -05:00
Azalea
3b6517090c [+] Add play count to trend 2024-02-10 05:50:28 -05:00
Azalea
5b2687ae83 [+] New maimai api 2024-02-10 05:30:06 -05:00
Azalea
c3402e8d44 [O] Ignore errors on EOF 2024-02-10 05:29:53 -05:00
Azalea
a9625dfecd [F] Fix kotlin build 2024-02-10 05:29:31 -05:00
Azalea
d6c8464e97 [+] Favicon 2024-02-10 03:52:27 -05:00
Azalea
1b557d5f8c [S] Fix page height overflow 2024-02-10 03:10:21 -05:00
Azalea
e1cf944db7 [S] Fix layout 2024-02-10 03:06:18 -05:00
Azalea
cb873efd38 [S] Minor style issue 2024-02-10 02:59:54 -05:00
Azalea
ee5acfa35f [+] Navbar 2024-02-10 02:56:29 -05:00
Azalea
2904c55f84 [S] Optimize styling 2024-02-10 01:30:19 -05:00
Azalea
4667e9652f Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-10 01:24:05 -05:00
Azalea
905b4fe92e [S] Mobile friendly :3 2024-02-10 01:24:03 -05:00
Azalea
85ccc78f8f [S] Style home page 2024-02-10 01:20:10 -05:00
Azalea
ad3bb89dc9 [+] Home site 2024-02-10 00:40:56 -05:00
Azalea
106bded9b6 [F] Fix test failure 2024-02-09 19:39:09 -08:00
Azalea Gui
f46c8a03d9 [+] Character convert 2024-02-09 22:36:26 -05:00
Azalea Gui
5d9693c419 [U] Combine music jsons 2024-02-09 22:35:13 -05:00
Azalea Gui
126546a938 [O] Fix crash due to duplicate keys in maimai2_user_item 2024-02-09 22:34:16 -05:00
Azalea
bb3902730b [U] Update url 2024-02-09 21:55:08 -05:00
Azalea
1b9e25e81c [U] Update url 2024-02-09 21:43:53 -05:00
Azalea
b11439ca87 [U] Update url 2024-02-09 21:23:03 -05:00
Azalea
66034ea407 [O] Get userid dynamically 2024-02-09 21:05:53 -05:00
Azalea
6690c665dd [+] Actually query for data 2024-02-09 20:32:13 -05:00
Azalea
4b71cd9940 [O] Responsive 2024-02-08 03:32:33 -05:00
Azalea
8b5ef24681 [+] Show rating 2024-02-08 03:18:55 -05:00
Azalea
e161890eaa Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-08 02:53:58 -05:00
Azalea
348f27237b [+] Rating screen 2024-02-08 02:53:45 -05:00
Azalea
c19164269a [+] Add nginx configuration 2024-02-08 02:52:47 -05:00
Azalea
071491b459 [M] Rename 2024-02-08 02:51:31 -05:00
Azalea
e1180a9a14 Merge pull request #9 from hykilpikonna/tc21/fix-crash-slot-data-not-found
Fix crash during call to CommonMonitor.SetCharacterSlot
2024-02-07 23:19:28 -05:00
Tianyi Cao
f76a027b32 add a few more comments 2024-02-07 20:08:33 -08:00
Tianyi Cao
cc1a91e5cd Update and restore unintentionally-changed formatting 2024-02-07 20:04:15 -08:00
Tianyi Cao
fcee4d13da Fix crash during call to CommonMonitor.SetCharacterSlot 2024-02-07 20:02:39 -08:00
Azalea
fa567ce0e2 Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-07 22:59:58 -05:00
Azalea Gui
c10085b65a [+] Maimai data format convert 2024-02-07 22:22:58 -05:00
Azalea
a8465408cf [+] AquaTop: Create project 2024-02-07 20:13:53 -05:00
Azalea
d123a50054 [U] Detailed instructions
Closes #8
2024-02-07 16:39:46 -05:00
Azalea
bd09e4017a [F] Fix build 2024-02-07 16:36:18 -05:00
Azalea
8b5e29d29e Update nightly.yml 2024-02-07 13:35:12 -08:00
Azalea
6e427b060a [O] Better build script 2024-02-07 16:26:59 -05:00
Azalea
7d0f70f1c0 [U] Update documentation 2024-02-07 05:42:40 -05:00
Azalea
5f1ca64d65 [O] Apply patches using reflection 2024-02-07 05:40:13 -05:00
Azalea
fb58f08e44 [PR] #7 from tc21: skip-to-music
Add ability to skip a bunch of stuff directly to music selection
2024-02-07 05:26:17 -05:00
Tianyi Cao
017d00371d formatting 2024-02-07 02:22:45 -08:00
Tianyi Cao
abe1d3ad29 Merge branch 'master' into tc21/skip-to-music 2024-02-07 02:20:39 -08:00
Azalea
fc48ba1994 [U] Update readme 2024-02-07 05:18:47 -05:00
Tianyi Cao
279fe5dcb8 Add ability to skip a bunch of stuff directly to music selection 2024-02-07 02:17:00 -08:00
Azalea
ccb3f7ef34 [+] Add cheat config 2024-02-07 05:16:07 -05:00
Azalea
de12ec6548 [+] Ticket unlock patch 2024-02-07 05:15:48 -05:00
Azalea
14bd2480ce [+] Fix character selection crash 2024-02-07 05:15:18 -05:00
Azalea
8152b9ab0d [M] Migrate to tomlet 2024-02-07 04:06:58 -05:00
Azalea
e6e4782d51 [O] Wording consistency 2024-02-07 03:56:07 -05:00
Azalea
aa5f4fb986 [+] Add option 2024-02-07 03:53:13 -05:00
Azalea
aa4fe50eeb Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-07 03:50:19 -05:00
Azalea
df072f1c40 [F] Use yaml instead 2024-02-07 03:49:14 -05:00
Azalea
9b3e202eb8 [PR] Merge #6: Add single player mode
Add single player mode
2024-02-07 02:40:18 -05:00
Azalea
b403189afb [+] Config 2024-02-07 02:38:36 -05:00
Tianyi Cao
82d076b87d Add single player mode, enabled by default 2024-02-06 23:38:36 -08:00
Azalea
dcdf951ebc [+] Add Tomlyn dependency 2024-02-07 02:37:28 -05:00
Azalea
4c1f8e4005 [F] Fix actions 2024-02-07 02:00:14 -05:00
Azalea
672ecc7f0a [+] More libs 2024-02-07 01:59:12 -05:00
Azalea
81f05528d8 [F] Fix actions 2024-02-07 01:46:45 -05:00
Azalea
57214aadfc [F] Fix actions 2024-02-07 01:45:15 -05:00
Azalea
6209a0120b [F] Fix actions 2024-02-07 01:44:06 -05:00
Azalea
98dcb3fbcb [+] Encrypted DLL 2024-02-07 01:36:06 -05:00
Azalea
2211e1c816 Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-07 01:29:36 -05:00
Azalea
36bf37da8d [F] Fix actions 2024-02-06 22:17:54 -08:00
Azalea
21be74fb05 [M] Rename dotnet-desktop.yml to aquamai.yml 2024-02-06 22:17:21 -08:00
Azalea
870ca6cd7f Create dotnet-desktop.yml 2024-02-06 22:17:02 -08:00
Azalea
4e832a5eb2 Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-07 00:48:55 -05:00
Azalea
7b9c23c203 [O] Build nightly only when src change 2024-02-06 21:48:32 -08:00
Azalea
fc91807e07 [M] Move data to docs 2024-02-07 00:47:17 -05:00
Azalea
8aab359b0b [+] AquaMai: Init project 2024-02-07 00:45:47 -05:00
Azalea Gui
363c9ff028 [+] maimai DX Tickets 2024-02-06 06:13:08 -05:00
Azalea Gui
2a800a825b [U] Update readme 2024-02-06 05:52:51 -05:00
Azalea Gui
36c1b1e0dd [U] openai migrate 2024-02-06 05:26:45 -05:00
Azalea Gui
01d7cdc7de [F] Fix conflict 2024-02-06 05:26:32 -05:00
Azalea Gui
6f25cb9017 Merge Gamer2097/AquaDX : Updated game notes and added ongeki A084 to 108
99a66858 - Update game_specific_notes.md
10bf6012 - add ongeki A084 to 108

Co-authored-by: Gamer2097 <antoniomarco200564@gmail.com>
Co-authored-by: Gamer2097 <63710393+Gamer2097@users.noreply.github.com>
2024-02-06 05:25:38 -05:00
Azalea Gui
c4ff479af4 [+] Maimai 140 event data 2024-02-06 05:17:15 -05:00
Azalea Gui
cc8406cd79 [+] Maimai extract script 2024-02-06 05:16:56 -05:00
Azalea Gui
b94c1915a8 [+] Add kotlin 2024-02-06 05:16:41 -05:00
Gamer2097
99a6685845 Update game_specific_notes.md 2024-01-10 14:31:25 +01:00
Gamer2097
10bf60126e add ongeki A084 to 108 2024-01-08 15:24:34 +01:00
Azalea
14d8f0730f [U] Update readme 2023-12-28 14:20:01 -08:00
Azalea
618503ccf2 [O] Ignore non-existent release 2023-12-22 19:10:28 -05:00
Azalea
f64a837172 [O] Optimize gh actions 2023-12-22 19:06:01 -05:00
Azalea
41d4de6150 [F] Fix github actions 2023-12-22 19:01:28 -05:00
Azalea
bcf3333dd2 [F] Fix github actions 2023-12-22 15:37:55 -08:00
Azalea
47fda64c90 [U] Update chusan notes 2023-12-22 16:47:04 -05:00
Azalea
4fce05b7d1 [F] Fix github actions 2023-12-21 02:13:36 -05:00
Azalea
363bcc6060 [F] Fix github actions 2023-12-21 02:10:55 -05:00
Azalea
bc734a5d25 [+] Nightly build action 2023-12-21 02:10:08 -05:00
Azalea
3f95678098 [+] Example systemd service 2023-12-21 01:52:11 -05:00
Azalea
e52c971aed [+] Build action 2023-12-21 01:47:48 -05:00
Azalea
1f82067752 [F] Resolve name conflict 2023-12-21 01:39:50 -05:00
Azalea
0ac1a4c088 [-] Remove deploy script 2023-12-21 01:28:46 -05:00
Azalea Gui
0fda25b482 [+] Docker 2023-12-21 01:27:18 -05:00
Azalea
dd70265cb6 [U] Update readme 2023-12-21 01:24:18 -05:00
Azalea
62e7d48f3c Merge rinsama/aqua : Ensure Chusan compatibility and add support for SunPlus
7a7076b1 - [chusan]Attempting to ensure compatibility with all known versions of Chusan, both before and after SunPlus
c8e1c5fb - fix BooleanStringIntDeserializer always returns false
50ceaf60 - Add Support for sunplus

Co-authored-by: Sanheiii <35133371+Sanheiii@users.noreply.github.com>
Co-authored-by: HoshimiRIN <admin@sakuramoe.dev>
2023-12-21 01:05:06 -05:00
Azalea
4905106953 [O] Optimize merge script 2023-12-21 01:04:55 -05:00
Azalea
48edab452d [+] Merge script 2023-12-21 00:44:36 -05:00
HoshimiRIN
7a7076b174 [chusan]Attempting to ensure compatibility with all known versions of Chusan, both before and after SunPlus 2023-12-17 21:50:09 +08:00
Sanheiii
c8e1c5fbb7 fix BooleanStringIntDeserializer always returns false 2023-12-16 15:39:49 +08:00
HoshimiRIN
50ceaf6097 Add Support for sunplus 2023-12-16 15:39:49 +08:00
Azalea
722d415e75 Merge pull request #4 from FeiZhaixiage/master
[API] Add a feature to get user photos.
2023-12-08 05:12:09 +09:00
肥宅虾哥
0d4221203b [API] Add a feature to retrieve user photos. 2023-12-08 02:49:19 +08:00
肥宅虾哥
4a64895e81 [api] Add maimai2 userPhoto API 2023-12-08 02:45:24 +08:00
肥宅虾哥
e271cb4555 [API] Add a feature to retrieve user photos.
Add:
Add a feature to retrieve user photos.
Fix bug:
Missing dependency: ObjectMapper
2023-12-08 02:21:49 +08:00
肥宅虾哥
0bf54e666b [API] Let web music list read from database
Add a feature to retrieve user photos.
2023-12-08 02:18:35 +08:00
肥宅虾哥
0913ef2060 [api] Add maimai2 userPhoto API 2023-12-08 02:14:20 +08:00
肥宅虾哥
7cc9fb11b6 Revert "New API to return user photos."
This reverts commit ba1f458907.
2023-12-08 02:10:49 +08:00
肥宅虾哥
9c51b1e0ee Revert "Add API - Get user photos (mai)"
This reverts commit e7848cb965.
2023-12-08 02:07:18 +08:00
肥宅虾哥
ba1f458907 New API to return user photos.
New API to return user photos.
2023-12-08 02:02:19 +08:00
肥宅虾哥
e7848cb965 Add API - Get user photos (mai)
Add:
New API to return  user photos.
Fix bug:
Missing dependency: ObjectMapper
2023-12-07 19:13:13 +08:00
Azalea
564ada10f5 Merge pull request #2 from FeiZhaixiage/patch-1 2023-12-06 03:07:40 +09:00
肥宅虾哥
48721ef7a9 Update Api - Add item list output by ItemKind.
Add item list output by ItemKind.
2023-12-05 23:56:32 +08:00
Azalea
bae06e2187 Merge pull request #1 from FeiZhaixiage/master 2023-12-05 09:53:08 +09:00
肥宅虾哥
8b8e6cb422 Update ApiMaimai2PlayerDataController.java
Add API to save options settings.
2023-12-05 06:24:46 +08:00
Azalea Gui
2ecc990aae [F] Fix Found more than one migration with version 241 2023-11-15 00:35:20 -05:00
Azalea
b47a841207 [F] chmod +x 2023-11-15 00:25:33 -05:00
199 changed files with 79175 additions and 144 deletions

BIN
.github/workflows/DATA vendored Normal file

Binary file not shown.

26
.github/workflows/aquamai.yml vendored Normal file
View File

@@ -0,0 +1,26 @@
name: AquaMai Build
on:
push:
branches: [ master ]
jobs:
build:
runs-on: windows-latest
defaults:
run:
working-directory: ./AquaMai
steps:
- uses: actions/checkout@v4
- name: Setup MSBuild Path
uses: microsoft/setup-msbuild@v1.0.2
- name: Decrypt DLL
run: gpg -d --batch --passphrase "${{ secrets.DLL_PASSPHRASE }}" -o .\Libs\Assembly-CSharp.dll ..\.github\workflows\DATA
- name: Build with MSBuild
run: msbuild.exe .\AquaMai.csproj

27
.github/workflows/gradle.yml vendored Normal file
View File

@@ -0,0 +1,27 @@
name: Gradle Build
on:
pull_request:
branches: [ master ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
server-id: github
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: Build with Gradle
run: |
mkdir data
./gradlew build

51
.github/workflows/nightly.yml vendored Normal file
View File

@@ -0,0 +1,51 @@
# Build script credit to https://github.com/OpenIntelWireless/itlwm/blob/master/.github/workflows/main.yml
name: Nightly Build
on:
push:
branches: [master]
paths: ['src/**']
workflow_dispatch:
jobs:
build:
permissions: write-all
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: '10'
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
server-id: github
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: Build Artifact
run: bash ./tools/build.sh
- name: Delete previous nightly release
run: |
gh release delete --cleanup-tag --yes --repo $GITHUB_REPOSITORY nightly || true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish GitHub Release
uses: ncipollo/release-action@v1
with:
bodyFile: "build/release/ReleaseNotes.md"
artifacts: "build/libs/aqua-nightly.jar,build/aqua-nightly.zip"
tag: "nightly"
token: ${{ secrets.GITHUB_TOKEN }}
draft: false
- name: Mark release undraft
run: |
gh release edit nightly --draft=false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

376
AquaMai/.gitignore vendored Normal file
View File

@@ -0,0 +1,376 @@
# Created by https://www.toptal.com/developers/gitignore/api/git,visualstudio
# Edit at https://www.toptal.com/developers/gitignore?templates=git,visualstudio
### Git ###
# Created by git for backups. To disable backups in Git:
# $ git config --global mergetool.keepBackup false
*.orig
# Created by git when using merge tools for conflicts
*.BACKUP.*
*.BASE.*
*.LOCAL.*
*.REMOTE.*
*_BACKUP_*.txt
*_BASE_*.txt
*_LOCAL_*.txt
*_REMOTE_*.txt
### VisualStudio ###
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*[.json, .xml, .info]
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# End of https://www.toptal.com/developers/gitignore/api/git,visualstudio
Output
.idea
Libs/Assembly-CSharp.dll
packages

14
AquaMai/App.config Normal file
View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?><configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="mscorlib" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Xml" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

282
AquaMai/AquaMai.csproj Normal file
View File

@@ -0,0 +1,282 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{788BC472-59F7-46F6-B760-65C18BA74389}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AquaMai</RootNamespace>
<AssemblyName>AquaMai</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>false</DebugSymbols>
<DebugType>None</DebugType>
<Optimize>true</Optimize>
<OutputPath>$(SolutionDir)Output\</OutputPath>
<DefineConstants>
</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Prefer32Bit>false</Prefer32Bit>
<DebugSymbols>false</DebugSymbols>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="0Harmony">
<HintPath>Libs\0Harmony.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>Libs\Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="MelonLoader">
<HintPath>Libs\MelonLoader.dll</HintPath>
</Reference>
<Reference Include="Mono.Posix">
<HintPath>Libs\Mono.Posix.dll</HintPath>
</Reference>
<Reference Include="Mono.Security">
<HintPath>Libs\Mono.Security.dll</HintPath>
</Reference>
<Reference Include="mscorlib">
<HintPath>Libs\mscorlib.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration">
<HintPath>Libs\System.Configuration.dll</HintPath>
</Reference>
<Reference Include="System.Core">
<HintPath>Libs\System.Core.dll</HintPath>
</Reference>
<Reference Include="System.Security">
<HintPath>Libs\System.Security.dll</HintPath>
</Reference>
<Reference Include="System.Xml">
<HintPath>Libs\System.Xml.dll</HintPath>
</Reference>
<Reference Include="Tomlet">
<HintPath>Libs\Tomlet.dll</HintPath>
</Reference>
<Reference Include="Unity.Analytics.DataPrivacy">
<HintPath>Libs\Unity.Analytics.DataPrivacy.dll</HintPath>
</Reference>
<Reference Include="Unity.TextMeshPro">
<HintPath>Libs\Unity.TextMeshPro.dll</HintPath>
</Reference>
<Reference Include="UnityEngine">
<HintPath>Libs\UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AccessibilityModule">
<HintPath>Libs\UnityEngine.AccessibilityModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AIModule">
<HintPath>Libs\UnityEngine.AIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AnimationModule">
<HintPath>Libs\UnityEngine.AnimationModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ARModule">
<HintPath>Libs\UnityEngine.ARModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AssetBundleModule">
<HintPath>Libs\UnityEngine.AssetBundleModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AudioModule">
<HintPath>Libs\UnityEngine.AudioModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.BaselibModule">
<HintPath>Libs\UnityEngine.BaselibModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ClothModule">
<HintPath>Libs\UnityEngine.ClothModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ClusterInputModule">
<HintPath>Libs\UnityEngine.ClusterInputModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ClusterRendererModule">
<HintPath>Libs\UnityEngine.ClusterRendererModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>Libs\UnityEngine.CoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CrashReportingModule">
<HintPath>Libs\UnityEngine.CrashReportingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.DirectorModule">
<HintPath>Libs\UnityEngine.DirectorModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.FileSystemHttpModule">
<HintPath>Libs\UnityEngine.FileSystemHttpModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.GameCenterModule">
<HintPath>Libs\UnityEngine.GameCenterModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.GridModule">
<HintPath>Libs\UnityEngine.GridModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.HotReloadModule">
<HintPath>Libs\UnityEngine.HotReloadModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ImageConversionModule">
<HintPath>Libs\UnityEngine.ImageConversionModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.IMGUIModule">
<HintPath>Libs\UnityEngine.IMGUIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.InputModule">
<HintPath>Libs\UnityEngine.InputModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.JSONSerializeModule">
<HintPath>Libs\UnityEngine.JSONSerializeModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.LocalizationModule">
<HintPath>Libs\UnityEngine.LocalizationModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.Networking">
<HintPath>Libs\UnityEngine.Networking.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ParticleSystemModule">
<HintPath>Libs\UnityEngine.ParticleSystemModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.PerformanceReportingModule">
<HintPath>Libs\UnityEngine.PerformanceReportingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.Physics2DModule">
<HintPath>Libs\UnityEngine.Physics2DModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.PhysicsModule">
<HintPath>Libs\UnityEngine.PhysicsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ProfilerModule">
<HintPath>Libs\UnityEngine.ProfilerModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ScreenCaptureModule">
<HintPath>Libs\UnityEngine.ScreenCaptureModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SharedInternalsModule">
<HintPath>Libs\UnityEngine.SharedInternalsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SpatialTracking">
<HintPath>Libs\UnityEngine.SpatialTracking.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SpriteMaskModule">
<HintPath>Libs\UnityEngine.SpriteMaskModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SpriteShapeModule">
<HintPath>Libs\UnityEngine.SpriteShapeModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.StreamingModule">
<HintPath>Libs\UnityEngine.StreamingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.StyleSheetsModule">
<HintPath>Libs\UnityEngine.StyleSheetsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SubstanceModule">
<HintPath>Libs\UnityEngine.SubstanceModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TerrainModule">
<HintPath>Libs\UnityEngine.TerrainModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TerrainPhysicsModule">
<HintPath>Libs\UnityEngine.TerrainPhysicsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TextCoreModule">
<HintPath>Libs\UnityEngine.TextCoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TextRenderingModule">
<HintPath>Libs\UnityEngine.TextRenderingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TilemapModule">
<HintPath>Libs\UnityEngine.TilemapModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.Timeline">
<HintPath>Libs\UnityEngine.Timeline.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TimelineModule">
<HintPath>Libs\UnityEngine.TimelineModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TLSModule">
<HintPath>Libs\UnityEngine.TLSModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UI">
<HintPath>Libs\UnityEngine.UI.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UIElementsModule">
<HintPath>Libs\UnityEngine.UIElementsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UIModule">
<HintPath>Libs\UnityEngine.UIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UmbraModule">
<HintPath>Libs\UnityEngine.UmbraModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UNETModule">
<HintPath>Libs\UnityEngine.UNETModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityAnalyticsModule">
<HintPath>Libs\UnityEngine.UnityAnalyticsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityConnectModule">
<HintPath>Libs\UnityEngine.UnityConnectModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityTestProtocolModule">
<HintPath>Libs\UnityEngine.UnityTestProtocolModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestAssetBundleModule">
<HintPath>Libs\UnityEngine.UnityWebRequestAssetBundleModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestAudioModule">
<HintPath>Libs\UnityEngine.UnityWebRequestAudioModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestModule">
<HintPath>Libs\UnityEngine.UnityWebRequestModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestTextureModule">
<HintPath>Libs\UnityEngine.UnityWebRequestTextureModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestWWWModule">
<HintPath>Libs\UnityEngine.UnityWebRequestWWWModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VehiclesModule">
<HintPath>Libs\UnityEngine.VehiclesModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VFXModule">
<HintPath>Libs\UnityEngine.VFXModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VideoModule">
<HintPath>Libs\UnityEngine.VideoModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VRModule">
<HintPath>Libs\UnityEngine.VRModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.WindModule">
<HintPath>Libs\UnityEngine.WindModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.XRModule">
<HintPath>Libs\UnityEngine.XRModule.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Cheat\TicketUnlock.cs" />
<Compile Include="Config.cs" />
<Compile Include="Fix\FixCharaCrash.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Main.cs" />
<Compile Include="UX\SinglePlayer.cs" />
<Compile Include="UX\SkipWarningScreen.cs" />
<Compile Include="UX\SkipToMusicSelection.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="AquaMai.toml" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

25
AquaMai/AquaMai.sln Normal file
View File

@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.6.33815.320
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AquaMai", "AquaMai.csproj", "{788BC472-59F7-46F6-B760-65C18BA74389}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{788BC472-59F7-46F6-B760-65C18BA74389}.Debug|Any CPU.ActiveCfg = Release|Any CPU
{788BC472-59F7-46F6-B760-65C18BA74389}.Debug|Any CPU.Build.0 = Release|Any CPU
{788BC472-59F7-46F6-B760-65C18BA74389}.Release|Any CPU.ActiveCfg = Release|Any CPU
{788BC472-59F7-46F6-B760-65C18BA74389}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {DDF15A6C-2A44-4EBE-BD85-F3EE61DCD8BF}
EndGlobalSection
EndGlobal

16
AquaMai/AquaMai.toml Normal file
View File

@@ -0,0 +1,16 @@
# ===================================
# Cheat: You control the buttons you press
[Cheat]
# Unlock normally event-only tickets
TicketUnlock=true
# ===================================
# UX: User Experience Improvements
[UX]
# Skip the warning screen and logo shown after the POST sequence
SkipWarningScreen=true
# Single player: Show 1P only, at the center of the screen
SinglePlayer=true
# !!EXPERIMENTAL!! Skip from the card-scanning screen directly to music selection screen
SkipToMusicSelection=false

View File

@@ -0,0 +1,40 @@
using Manager.MaiStudio;
using HarmonyLib;
namespace AquaMai.Cheat
{
/**
* Unlock tickets that are typically locked unless a specific event is open.
*/
public class TicketUnlock
{
// For any ticket, return the event ID 1 to unlock it
[HarmonyPrefix]
[HarmonyPatch(typeof(TicketData), "get_ticketEvent")]
public static bool get_ticketEvent(ref StringID __result)
{
var id = new Manager.MaiStudio.Serialize.StringID
{
id = 1,
str = "無期限常時解放"
};
var sid = new StringID();
sid.Init(id);
__result = sid;
return false;
}
// Modify the maxTicketNum to 0
// this is because TicketManager.GetTicketData adds the ticket to the list if either
// the player owns at least one ticket or the maxTicketNum = 0
[HarmonyPrefix]
[HarmonyPatch(typeof(TicketData), "get_maxCount")]
public static bool get_maxCount(ref int __result)
{
__result = 0;
return false;
}
}
}

23
AquaMai/Config.cs Normal file
View File

@@ -0,0 +1,23 @@
using System.Diagnostics.CodeAnalysis;
namespace AquaMai
{
[SuppressMessage("ReSharper", "ClassNeverInstantiated.Global")]
public class Config
{
public UXConfig UX { get; set; }
public CheatConfig Cheat { get; set; }
public class CheatConfig
{
public bool TicketUnlock { get; set; }
}
public class UXConfig
{
public bool SkipWarningScreen { get; set; }
public bool SinglePlayer { get; set; }
public bool SkipToMusicSelection { get; set; }
}
}
}

View File

@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using HarmonyLib;
using Process;
using Util;
namespace AquaMai.Fix
{
/**
* Fix character selection crashing due to missing character data
*/
public class FixCharaCrash
{
// Check if the return is null. If it is, make up a color
[HarmonyPostfix]
[HarmonyPatch(typeof(CharacterSelectProces), "GetMapColorData")]
public static void GetMapColorData(ref CharacterSelectProces __instance, ref CharacterMapColorData __result)
{
if (__result != null) return;
// 1 is a color that definitely exists
if (MapMaster.GetSlotData(1) == null)
{
MapMaster.GetSlotData(1).Load();
}
__result = MapMaster.GetSlotData(1);
}
// This is called when loading the music selection screen, to display characters on the top screen
[HarmonyPrefix]
[HarmonyPatch(typeof(Monitor.CommonMonitor), "SetCharacterSlot", new Type[] { typeof(MessageCharactorInfomationData) })]
public static bool SetCharacterSlot(ref MessageCharactorInfomationData data, Dictionary<int, CharacterSlotData> ____characterSlotData)
{
// Some characters are not found in this dictionary. We simply skip loading those characters
if (!____characterSlotData.ContainsKey(data.MapKey))
{
Console.Log($"Could not get CharacterSlotData for character [Index={data.Index}, MapKey={data.MapKey}], ignoring...");
return false;
}
return true;
}
}
}

BIN
AquaMai/Libs/0Harmony.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
AquaMai/Libs/Mono.Posix.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
AquaMai/Libs/System.Xml.dll Normal file

Binary file not shown.

BIN
AquaMai/Libs/System.dll Normal file

Binary file not shown.

BIN
AquaMai/Libs/Tomlet.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
AquaMai/Libs/mscorlib.dll Normal file

Binary file not shown.

84
AquaMai/Main.cs Normal file
View File

@@ -0,0 +1,84 @@
using System;
using AquaMai.Fix;
using MelonLoader;
using Tomlet;
namespace AquaMai
{
public static class BuildInfo
{
public const string Name = "AquaMai";
public const string Description = "Mod for Sinmai";
public const string Author = "Aza";
public const string Company = null;
public const string Version = "1.0.0";
public const string DownloadLink = null;
}
public class AquaMai : MelonMod
{
public static Config AppConfig { get; private set; }
private static void Patch(Type type)
{
MelonLogger.Msg($"> Patching {type}");
HarmonyLib.Harmony.CreateAndPatchAll(type);
}
/**
* Apply patches using reflection, based on the settings
*/
private static void ApplyPatches()
{
// Iterate over all properties of AppConfig
foreach (var categoryProp in AppConfig.GetType().GetProperties())
{
// Get the value of the category property (e.g., UX, Cheat)
var categoryValue = categoryProp.GetValue(AppConfig);
if (categoryValue == null) continue;
var categoryType = categoryValue.GetType();
// Iterate over properties in the category (e.g., SkipWarningScreen, SinglePlayer)
foreach (var settingProp in categoryType.GetProperties())
{
// The property should be a boolean
if (settingProp.PropertyType != typeof(bool)) continue;
// Check if the boolean value is true
if (!(bool) settingProp.GetValue(categoryValue)) continue;
// Get the Type from the config directive name
var directiveType = Type.GetType($"AquaMai.{categoryProp.Name}.{settingProp.Name}");
// If the type is found, call the Patch method
if (directiveType != null) Patch(directiveType);
else MelonLogger.Error($"Type not found for {categoryProp.Name}.{settingProp.Name}");
}
}
}
public override void OnInitializeMelon()
{
MelonLogger.Msg("Loading mod settings...");
// Check if AquaMai.toml exists
if (!System.IO.File.Exists("AquaMai.toml"))
{
MelonLogger.Error("AquaMai.toml not found! Please create it.");
return;
}
// Read AquaMai.toml to load settings
AppConfig = TomletMain.To<Config>(System.IO.File.ReadAllText("AquaMai.toml"));
// Apply patches based on the settings
ApplyPatches();
// Fixes that does not have side effects
// These don't need to be configurable
Patch(typeof(FixCharaCrash));
MelonLogger.Msg("Loaded!");
}
}
}

View File

@@ -0,0 +1,18 @@
using System.Reflection;
using MelonLoader;
[assembly: AssemblyTitle(AquaMai.BuildInfo.Description)]
[assembly: AssemblyDescription(AquaMai.BuildInfo.Description)]
[assembly: AssemblyCompany(AquaMai.BuildInfo.Company)]
[assembly: AssemblyProduct(AquaMai.BuildInfo.Name)]
[assembly: AssemblyCopyright("Created by " + AquaMai.BuildInfo.Author)]
[assembly: AssemblyTrademark(AquaMai.BuildInfo.Company)]
[assembly: AssemblyVersion(AquaMai.BuildInfo.Version)]
[assembly: AssemblyFileVersion(AquaMai.BuildInfo.Version)]
[assembly: MelonInfo(typeof(AquaMai.AquaMai), AquaMai.BuildInfo.Name, AquaMai.BuildInfo.Version, AquaMai.BuildInfo.Author, AquaMai.BuildInfo.DownloadLink)]
[assembly: MelonColor()]
// Create and Setup a MelonGame Attribute to mark a Melon as Universal or Compatible with specific Games.
// If no MelonGame Attribute is found or any of the Values for any MelonGame Attribute on the Melon is null or empty it will be assumed the Melon is Universal.
// Values for MelonGame Attribute can be found in the Game's app.info file or printed at the top of every log directly beneath the Unity version.
[assembly: MelonGame(null, null)]

33
AquaMai/README.md Normal file
View File

@@ -0,0 +1,33 @@
## AquaMai
This mod is heavily WIP. More details will be added as the development progresses.
### Features
**Cheats**
* Unlock all tickets
**UX Optimization**
* Remove the starting logo and warning cutscene
* Single Player (1P) mode
* Skip from card scanning directly to music selection (experimental)
**Bug Fixes**
* Fix crash in the character selection screen
### Development
1. Copy `Assembly-CSharp.dll` to `Libs` folder.
2. Install [.NET Framework 4.7.2 Developer Pack](https://dotnet.microsoft.com/en-us/download/dotnet-framework/thank-you/net472-developer-pack-offline-installer)
3. Open `AquaMai.sln` in JetBrains Rider.
4. Build the solution.
5. Copy `Output/AquaMai.dll` to `Mods` folder.
6. Configure and copy `AquaMai.toml` to the same folder as your game executable: `Sinmai.exe`
### Relevant Links
* [MelonLoader Wiki](https://melonwiki.xyz/#/modders/quickstart)
* [Harmony Docs](https://harmony.pardeike.net/articles/patching-prefix.html)

View File

@@ -0,0 +1,32 @@
using System;
using HarmonyLib;
using UnityEngine;
namespace AquaMai.UX
{
// Hides the 2p (right hand side) UI.
// Note: this is not my original work. I simply interpreted the code and rewrote it as a mod.
public class SinglePlayer
{
[HarmonyPrefix]
[HarmonyPatch(typeof(Main.GameMain), "LateInitialize", new Type[] { typeof(MonoBehaviour), typeof(Transform), typeof(Transform) })]
public static bool LateInitialize(MonoBehaviour gameMainObject, ref Transform left, ref Transform right)
{
left.transform.position = Vector3.zero;
right.localScale = Vector3.zero;
GameObject.Find("Mask").SetActive(false);
return true;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(MeshButton), "IsPointInPolygon", new Type[] { typeof(Vector2[]), typeof(Vector2) })]
public static bool IsPointInPolygon(Vector2[] polygon, ref Vector2 point)
{
var screenWidth = Screen.width;
point = new Vector2(point.x - (screenWidth / 2), point.y);
return true;
}
}
}

View File

@@ -0,0 +1,26 @@
using HarmonyLib;
using Manager;
using Process;
using Process.Information;
namespace AquaMai.UX
{
public class SkipToMusicSelection
{
/*
* Highly experimental, may well break some stuff
* Works by overriding the info screen (where it shows new events and stuff)
* to directly exit to the music selection screen, skipping character and
* event selection, among others
*/
[HarmonyPrefix]
[HarmonyPatch(typeof(InformationProcess), "OnUpdate")]
public static bool OnUpdate(InformationProcess __instance, ProcessDataContainer ___container)
{
GameManager.SetMaxTrack();
___container.processManager.AddProcess(new MusicSelectProcess(___container));
___container.processManager.ReleaseProcess(__instance);
return false;
}
}
}

View File

@@ -0,0 +1,28 @@
using HarmonyLib;
using Monitor;
namespace AquaMai.UX
{
public class SkipWarningScreen
{
/*
* Patch PlayLogo to disable the warning screen
*/
[HarmonyPrefix]
[HarmonyPatch(typeof (WarningMonitor), "PlayLogo")]
public static bool PlayLogo()
{
// Return false to block the original method
return false;
}
[HarmonyPrefix]
[HarmonyPatch(typeof (WarningMonitor), "IsLogoAnimationEnd")]
public static bool IsLogoAnimationEnd(ref bool __result)
{
// Always return true to indicate the animation has ended
__result = true;
return false;
}
}
}

41
AquaNet/.eslintrc.cjs Normal file
View File

@@ -0,0 +1,41 @@
// ..eslintrc.cjs example
module.exports = {
root: true,
env: {
browser: true,
es2023: true
},
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:svelte/recommended',
],
ignorePatterns: ['dist', '..eslintrc.cjs'],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module'
},
rules: {
// Custom styling rules
'comma-dangle': ['warn', 'only-multiline'],
'indent': ['warn', 2],
'semi': ['warn', 'never'],
'quotes': ['warn', 'single'],
'arrow-parens': ['warn', 'as-needed'],
'linebreak-style': ['warn', 'unix'],
'object-curly-spacing': ['warn', 'always'],
'array-bracket-spacing': ["error", "always", {
"singleValue": false,
"objectsInArrays": false,
"arraysInArrays": false
}],
// Disabled rules
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'no-constant-condition': 'off',
'@typescript-eslint/no-explicit-any': 'off',
},
}

24
AquaNet/.gitignore vendored Normal file
View File

@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

22
AquaNet/README.md Normal file
View File

@@ -0,0 +1,22 @@
# AquaNet
This is the codebase for the new frontend of AquaDX.
This project is also heavily WIP, so more details will be added later on.
## Development
This project uses Svelte (NOT SvelteKit) + TypeScript + Sass, built using Vite.
The preferred editor is IntelliJ IDEA, but VSCode can pass as well.
Please check out [SVELTE.md](SVELTE.md) for more details on the technical aspects of the project.
### Running locally
First, you would need to install Node.js and yarn.
Then, you would need to start your testing AquaDX server and configure the `aqua_host` in `src/libs/config.ts` to use your URL.
Please leave `data_host` unchanged if you're not sure what it is.
Finally, run:
```shell
yarn install
yarn dev
```

35
AquaNet/SVELTE.md Normal file
View File

@@ -0,0 +1,35 @@
## Technical considerations
**Why use this over SvelteKit?**
- It brings its own routing solution which might not be preferable for some users.
- It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app.
This template contains as little as possible to get started with Vite + TypeScript + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project.
Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate.
**Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?**
Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash references keeps the default TypeScript setting of accepting type information from the entire workspace, while also adding `svelte` and `vite/client` type information.
**Why include `.vscode/extensions.json`?**
Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project.
**Why enable `allowJs` in the TS template?**
While `allowJs: false` would indeed prevent the use of `.js` files in the project, it does not prevent the use of JavaScript syntax in `.svelte` files. In addition, it would force `checkJs: false`, bringing the worst of both worlds: not being able to guarantee the entire codebase is TypeScript, and also having worse typechecking for the existing JavaScript. In addition, there are valid use cases in which a mixed codebase may be relevant.
**Why is HMR not preserving my local component state?**
HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/rixo/svelte-hmr#svelte-hmr).
If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR.
```ts
// store.ts
// An extremely simple external store
import { writable } from 'svelte/store'
export default writable(0)
```

43
AquaNet/docs/nginx.conf Normal file
View File

@@ -0,0 +1,43 @@
# Data server for Aqua frontend
server
{
listen 443 ssl;
listen [::]:443 ssl;
server_name aqua-data.example.com;
# / should redirect to the actual website aquadx.hydev.org
location / {
return 301 https://example.com;
}
# /maimai should be a file server on /etc/nginx/aqua-data/maimai
# These are generated using:
# cd Package/Sinmai_Data/StreamingAssets/A000
# mkdir -p /etc/nginx/aqua-data/maimai
# python3 AquaDX/tools/data_convert.py .. /etc/nginx/aqua-data/maimai/meta
# rm -rf MovieData SoundData
# (Open AssetRipper and open folder Package/Sinmai_Data)
# (Export all assets to /tmp/maimai)
# cd /tmp/maimai/ExportedProject/Assets
# find -name "*.meta" -delete -print
# find -name "*.asset" -delete -print
# cp -r assetbundle Texture2D Resources/common/sprites /etc/nginx/aqua-data/maimai
# rm -rf /tmp/maimai
location /maimai {
root /etc/nginx/aqua-data;
# Specify UTF-8 encoding
charset utf-8;
# CORS allow all
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
autoindex on;
}
ssl_certificate /dev/null;
ssl_certificate_key /dev/null;
}

Some files were not shown because too many files have changed in this diff Show More