8 Commits
Author SHA1 Message Date
ppc 2d3b129126 bump android package version 2024-12-13 20:46:08 +00:00
ppc b729b4e31b more package updates 2024-12-13 20:22:34 +00:00
ppc 377fe93645 Merge remote-tracking branch 'origin/master' 2024-12-13 19:52:42 +00:00
ppc cbd2825475 update to expo 52 2024-11-28 14:52:31 +00:00
ppc b9bbcc9228 update workflow to .net 9 2024-11-28 14:00:33 +00:00
ppc 61fb81c75c add android links to readme 2024-11-28 13:52:09 +00:00
ppc d3b96d3017 don't render invisible icons on android 2024-11-22 16:22:51 +00:00
ppc 9b136006a0 add build-properties plugin 2024-11-21 22:52:48 +00:00
10 changed files with 4701 additions and 5174 deletions
+1 -1
View File
@@ -40,7 +40,7 @@ jobs:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4 - uses: actions/setup-dotnet@v4
with: with:
dotnet-version: '8.x' dotnet-version: '9.0.x'
- name: Set version - name: Set version
run: | run: |
+3 -2
View File
@@ -22,11 +22,12 @@
"package": "moe.ppc.amnet", "package": "moe.ppc.amnet",
"versionCode": 3, "versionCode": 3,
"adaptiveIcon": { "adaptiveIcon": {
"foregroundImage": "./assets/icon-android-alt.png", "foregroundImage": "./assets/icon-android.png",
"backgroundColor": "#DED8FD" "backgroundColor": "#DED8FD"
}, },
"splash": { "splash": {
"image": "./assets/icon-android-alt.png", "resizeMode": "cover",
"image": "./assets/icon-android.png",
"backgroundColor": "#DED8FD", "backgroundColor": "#DED8FD",
"dark": { "dark": {
"backgroundColor": "#3B5ACC" "backgroundColor": "#3B5ACC"
+2 -2
View File
@@ -1,6 +1,6 @@
import {Plus} from "lucide-react-native"; import {Plus} from "lucide-react-native";
import {TouchableOpacity} from "react-native";
import {useTheme} from "@react-navigation/native"; import {useTheme} from "@react-navigation/native";
import {Platform, TouchableOpacity} from "react-native";
import {createNativeStackNavigator} from "@react-navigation/native-stack"; import {createNativeStackNavigator} from "@react-navigation/native-stack";
import CardManager from "./CardManager"; import CardManager from "./CardManager";
@@ -22,7 +22,7 @@ export default function CardManagerStack({navigation}) {
component={CardManager} component={CardManager}
options={{ options={{
title: "Cards", title: "Cards",
headerRight: () => <TouchableOpacity onPress={() => navigation.navigate('add-card')}><Plus/></TouchableOpacity> headerRight: () => Platform.OS === 'android' ? null : <TouchableOpacity onPress={() => navigation.navigate('add-card')}><Plus/></TouchableOpacity>
}}/> }}/>
</Stack.Navigator> </Stack.Navigator>
); );
+2 -2
View File
@@ -1,6 +1,6 @@
import {Plus} from "lucide-react-native"; import {Plus} from "lucide-react-native";
import {TouchableOpacity} from "react-native";
import {useTheme} from "@react-navigation/native"; import {useTheme} from "@react-navigation/native";
import {Platform, TouchableOpacity} from "react-native";
import {createNativeStackNavigator} from "@react-navigation/native-stack"; import {createNativeStackNavigator} from "@react-navigation/native-stack";
import ServerCardIn from "./ServerCardIn"; import ServerCardIn from "./ServerCardIn";
@@ -24,7 +24,7 @@ export default function ServerManagerStack({navigation}) {
component={ServerManager} component={ServerManager}
options={{ options={{
title: "Servers", title: "Servers",
headerRight: () => <TouchableOpacity headerRight: () => Platform.OS === 'android' ? null : <TouchableOpacity
onPress={() => navigation.navigate('add-server')}> onPress={() => navigation.navigate('add-server')}>
<Plus/> <Plus/>
</TouchableOpacity> </TouchableOpacity>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

+3972 -4461
View File
File diff suppressed because it is too large Load Diff
+19 -19
View File
@@ -13,33 +13,33 @@
"@react-navigation/bottom-tabs": "^6.6.1", "@react-navigation/bottom-tabs": "^6.6.1",
"@react-navigation/native": "^6.1.18", "@react-navigation/native": "^6.1.18",
"@react-navigation/native-stack": "^6.11.0", "@react-navigation/native-stack": "^6.11.0",
"@realm/react": "^0.9.0", "@realm/react": "^0.11.0",
"@types/react": "~18.2.79", "@types/react": "~18.3.12",
"amnet-shared": "file:../amnet-shared", "amnet-shared": "file:../amnet-shared",
"date-fns": "^3.6.0", "date-fns": "^3.6.0",
"expo": "^51.0.38", "expo": "^52.0.0",
"expo-blur": "~13.0.2", "expo-blur": "~14.0.1",
"expo-build-properties": "~0.12.5", "expo-build-properties": "^0.13.1",
"expo-clipboard": "~6.0.3", "expo-clipboard": "~7.0.0",
"expo-constants": "~16.0.2", "expo-constants": "~17.0.3",
"expo-dev-client": "~4.0.29", "expo-dev-client": "~5.0.4",
"expo-linking": "~6.3.1", "expo-linking": "~7.0.3",
"expo-status-bar": "~1.12.1", "expo-status-bar": "~2.0.0",
"expo-system-ui": "~3.0.7", "expo-system-ui": "~4.0.4",
"lucide-react-native": "^0.427.0", "lucide-react-native": "^0.427.0",
"patch-package": "^8.0.0", "patch-package": "^8.0.0",
"react": "18.2.0", "react": "18.3.1",
"react-native": "0.74.5", "react-native": "0.76.5",
"react-native-context-menu-view": "^1.16.0", "react-native-context-menu-view": "^1.16.0",
"react-native-gesture-handler": "~2.16.1", "react-native-gesture-handler": "~2.20.2",
"react-native-get-random-values": "^1.11.0", "react-native-get-random-values": "^1.11.0",
"react-native-paper": "^5.12.5", "react-native-paper": "^5.12.5",
"react-native-reanimated": "~3.10.1", "react-native-reanimated": "~3.16.1",
"react-native-safe-area-context": "4.10.5", "react-native-safe-area-context": "4.12.0",
"react-native-screens": "3.31.1", "react-native-screens": "~4.1.0",
"react-native-svg": "15.2.0", "react-native-svg": "15.8.0",
"react-native-url-polyfill": "^2.0.0", "react-native-url-polyfill": "^2.0.0",
"realm": "^12.12.1", "realm": "^12.14.0",
"typescript": "~5.3.3" "typescript": "~5.3.3"
} }
} }
+644 -651
View File
File diff suppressed because it is too large Load Diff
+4 -2
View File
@@ -1,5 +1,7 @@
import * as animate from "tailwindcss-animate";
/** @type {import('tailwindcss').Config} */ /** @type {import('tailwindcss').Config} */
module.exports = { export default {
darkMode: ["class"], darkMode: ["class"],
content: [ content: [
'./src/**/*.{ts,tsx}', './src/**/*.{ts,tsx}',
@@ -70,5 +72,5 @@ module.exports = {
}, },
}, },
}, },
plugins: [require("tailwindcss-animate")], plugins: [animate],
} }
+36 -16
View File
@@ -1,7 +1,7 @@
<div align="center"> <div align="center">
# AMNet # AMNet
[TestFlight](https://testflight.apple.com/join/kHbeJTsQ) • [Website](http://card.ppc.moe) • [Server DLLs](https://gitea.tendokyu.moe/ppc/amnet/releases) [TestFlight](https://testflight.apple.com/join/kHbeJTsQ) • [Firebase](https://appdistribution.firebase.dev/i/6acc3151357deaa8) • [Website](http://card.ppc.moe) • [Server DLLs](https://gitea.tendokyu.moe/ppc/amnet/releases)
An Aime Card Switcher for segatools-based games. An Aime Card Switcher for segatools-based games.
@@ -9,9 +9,9 @@ An Aime Card Switcher for segatools-based games.
## Overview ## Overview
AMNet is designed to simulate the `DEVICE/aime.txt` file, allowing multiple users to log into a game using their phone. AMNet is designed to simulate the `DEVICE/aime.txt` file, allowing multiple users to log into a game using their phone.
This was originally designed for use with maimai/Chunithm, but should be compatible with any segatools-based game with Aime support. This was originally intended for use with maimai and Chunithm, but should be compatible with any segatools-based game with Aime support.
### Setup ## Setup
1. Download the latest `amnet.dll` from the releases page 1. Download the latest `amnet.dll` from the releases page
2. Move `amnet.dll` to the game directory 2. Move `amnet.dll` to the game directory
3. Edit `segatools.ini` to use the new DLL: 3. Edit `segatools.ini` to use the new DLL:
@@ -32,19 +32,39 @@ gameId=SDEZ
;enableKeyboardMode=1 ;enableKeyboardMode=1
``` ```
4. Launch the game, and check the amdaemon console for server startup messages 4. Launch the game, and check the amdaemon console for server startup messages
5. Access the using one of the interfaces (see below), connect to the running server, add a card and start playing! 5. Access the using one of the interfaces (see below), add a new server `http://<your-ip-address>:6070`, add a card and start playing!
### Web Interface ## Interfaces
The web interface can be accessed by navigating to http://card.ppc.moe/ on a device on the same network as the server. AMNet can be used on most platforms, see below for options available for each platform:
This website is also installable as a PWA, which will allow it to be registered as an app on your device.
> Because the server can only listen on HTTP, the website needs to be visited over HTTP as well. This may cause issues with some devices, as they may block HTTP requests on HTTPS websites. <table>
<tbody>
[![](./res/web.jpeg)](http://card.ppc.moe) <tr>
<th>Platform</th>
### Native Application <th>Method</th>
The AMNet application is available (and fully supported) for iOS devices, and can be downloaded by joining the TestFlight (see links at the top of the file) or built manually. <th>Notes</th>
Android is technically supported but hasn't been tested; as such APKs aren't provided at this moment. </tr>
<tr>
<td>iOS</td>
<td><a href="https://testflight.apple.com/join/kHbeJTsQ" target="_blank">TestFlight</a></td>
<td></td>
</tr>
<tr>
<td rowspan="2">Android</td>
<td><a href="https://appdistribution.firebase.dev/i/6acc3151357deaa8" target="_blank">Firebase</a></td>
<td>Recommended for reduced download/install size and easier upgrading</td>
</tr>
<tr>
<td>.apk</td>
<td>Larger download, manual installation required.</td>
</tr>
<tr>
<td>All</td>
<td><a href="http://card.ppc.moe" target="_blank">Web</a></td>
<td>Works on all platforms and is installable as a PWA. Ensure it's used on <code>http</code> to avoid CORS-related errors</td>
</tr>
</tbody>
</table>
<div align="center"> <div align="center">
<img src="./res/native.png" height="600"/> <img src="./res/native.png" height="600"/>
@@ -62,7 +82,7 @@ Building the server without publish mode will result in a DLL that cannot be run
dotnet publish -c Release -r win-x64 -p:Version=1.0.0 AMNet.Server/AMNet.Server.csproj dotnet publish -c Release -r win-x64 -p:Version=1.0.0 AMNet.Server/AMNet.Server.csproj
``` ```
The dll will be available at `.\AMNet.Server\bin\Release\net8.0-windows\win-x64\publish\amnet.dll`. The dll will be available at `.\AMNet.Server\bin\Release\net9.0-windows\win-x64\publish\amnet.dll`.
### Website (amnet-web) ### Website (amnet-web)
The web interface is built using Vite and React. Building the web interface requires Node.js (or alternative runtime). The web interface is built using Vite and React. Building the web interface requires Node.js (or alternative runtime).
@@ -79,7 +99,7 @@ npm run build # build the website, outputs to ./dist
The mobile app is built using Expo and React Native. The app requires Node.js and npm to build, along with either the Android SDK or Xcode for iOS. The mobile app is built using Expo and React Native. The app requires Node.js and npm to build, along with either the Android SDK or Xcode for iOS.
After cloning the repository, install dependencies then run the app, or prebuild for the platform of your choice then complete the build process for a standalone app: After cloning the repository, install dependencies then run the app, or prebuild for the platform of your choice then complete the build process for a standalone app:
> amnet-native relies on one or more native libraries, so Expo Go cannot be used. The app must be built and run on a physical device or simulator. > amnet-native relies on multiple native libraries not included in Expo Go. The app must be built from scratch and run on a physical device or simulator.
```shell ```shell
cd amnet-native cd amnet-native