diff --git a/README.md b/README.md index 5e7412e6aa..b5275e6bdc 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

Official Website • - Discord + Discord

@@ -28,13 +28,24 @@ First, make sure your dump of the game is clean and supported by Dusk. You can d | GameCube USA | `75edd3ddff41f125d1b4ce1a40378f1b565519e7` | | GameCube EUR | `2601822a488eeb86fb89db16ca8f29c2c953e1ca` | +*Support for other versions of the game is planned in the future. + ### 2. Download [Dusk](https://github.com/TwilitRealm/dusk/releases) ### 3. Setup the game - +**Windows / macOS / Linux** - Extract the .zip file - Launch Dusk -- Press **Select Disc Image** and provide the path to your supported game dump. +- Press **Select Disc Image** and provide the path to your supported game dump +- Press **Play**! + +**iOS** +- Follow the [iOS setup guide](docs/ios-install-altstore.md) + +**Android** +- Install the Dusk apk +- Launch Dusk +- Press **Select Disc Image** and provide the path to your supported game dump - Press **Play**! # Building diff --git a/docs/ios-install-altstore.md b/docs/ios-install-altstore.md new file mode 100644 index 0000000000..fdfc7689d6 --- /dev/null +++ b/docs/ios-install-altstore.md @@ -0,0 +1,46 @@ +# Installing Dusk on iOS via AltStore + +## Prerequisites + +- Mac with Homebrew installed +- iPhone connected via USB +- Dusk IPA file (download the latest `Dusk-vX.X.X-ios-arm64.ipa` from the [releases page](https://github.com/TwilitRealm/dusk/releases)) +- Game disc - `GZ2E01` (Gamecube USA) or `GZ2PE01` (Gamecube PAL) + +## 1. Install AltServer + +```sh +brew install altserver +open -a AltServer +``` + +AltServer will appear in your menu bar. + +## 2. Enable Developer Mode (iOS 16+) + +- On your iPhone, go to **Settings > Privacy & Security > Developer Mode** +- Toggle it on and restart when prompted + +## 3. Install AltStore on Your iPhone + +- Click AltServer in the menu bar +- Click **Install AltStore > [Your iPhone]** +- Enter your Apple ID credentials when prompted +- On your iPhone, go to **Settings > General > VPN & Device Management** +- Tap your Apple ID under "Developer App" and tap **Trust** + +## 4. Copy Files to Your iPhone + +Transfer the IPA and game disc to your iPhone so they're accessible in the Files app. A few ways to do this: + +- **AirDrop** - Right-click the files on your Mac and choose Share > AirDrop +- **iCloud Drive** - Place files in iCloud Drive on your Mac and they'll sync to Files on your iPhone +- **USB transfer** - Connect your iPhone and drag files via Finder's sidebar +- **Cloud storage** - Upload to Google Drive, Dropbox, etc. and download on your iPhone + +## 5. Install via AltStore + +- Open **AltStore** on your iPhone +- Go to the **My Apps** tab +- Tap the **+** button (top left) +- Open the **Files** app and select the `.ipa` file \ No newline at end of file diff --git a/extern/aurora b/extern/aurora index 1eeff98783..9413f24f65 160000 --- a/extern/aurora +++ b/extern/aurora @@ -1 +1 @@ -Subproject commit 1eeff98783c36fba83970c011783a4fd9deac018 +Subproject commit 9413f24f65e20969b8320e651af306a2fd0798c8 diff --git a/platforms/android/README.md b/platforms/android/README.md index c7ecd684c1..f51b37db73 100644 --- a/platforms/android/README.md +++ b/platforms/android/README.md @@ -66,12 +66,11 @@ Output APK: You can pass command-line args through the activity intent: ```bash -adb shell am start -n com.twilitrealm.dusk/.DuskActivity \ - --es dusk_args "'/sdcard/Download/The Legend of Zelda: Twilight Princess (USA).iso'" +adb shell am start -n dev.twilitrealm.dusk/.DuskActivity \ + --es dusk_args "--backend vulkan" ``` Supported extras: - `dusk_args`: single shell-like argument string - `dusk_argv`: string-array argv -- `dusk_disc`: compatibility shortcut (single ISO path) diff --git a/platforms/android/app/build.gradle b/platforms/android/app/build.gradle index 01e706a382..b7775df8e0 100644 --- a/platforms/android/app/build.gradle +++ b/platforms/android/app/build.gradle @@ -13,11 +13,11 @@ def syncDuskAssets = tasks.register('syncDuskAssets', Sync) { } android { - namespace 'com.twilitrealm.dusk' + namespace 'dev.twilitrealm.dusk' compileSdk 36 defaultConfig { - applicationId 'com.twilitrealm.dusk' + applicationId 'dev.twilitrealm.dusk' minSdk 26 targetSdk 36 versionCode 1 @@ -60,7 +60,8 @@ dependencies { } tasks.configureEach { task -> - if (task.name.startsWith('merge') && task.name.endsWith('Assets')) { + if ((task.name.startsWith('merge') && task.name.endsWith('Assets')) || + task.name.toLowerCase().contains('lint')) { task.dependsOn(syncDuskAssets) } } diff --git a/platforms/android/app/proguard-rules.pro b/platforms/android/app/proguard-rules.pro index 8f2cf4a4e2..72b7ca16fa 100644 --- a/platforms/android/app/proguard-rules.pro +++ b/platforms/android/app/proguard-rules.pro @@ -1,4 +1,4 @@ # Keep SDL activity and related JNI bridge methods. -keep class org.libsdl.app.** { *; } --keep class com.twilitrealm.dusk.DuskHttpClient { *; } --keep class com.twilitrealm.dusk.DuskHttpClient$Response { *; } +-keep class dev.twilitrealm.dusk.DuskHttpClient { *; } +-keep class dev.twilitrealm.dusk.DuskHttpClient$Response { *; } diff --git a/platforms/android/app/src/main/AndroidManifest.xml b/platforms/android/app/src/main/AndroidManifest.xml index a902065475..f3e11030ca 100644 --- a/platforms/android/app/src/main/AndroidManifest.xml +++ b/platforms/android/app/src/main/AndroidManifest.xml @@ -25,7 +25,7 @@ android:resource="@xml/game_mode_config" /> DeleteLocalRef(activity); if (clientClass == nullptr) { return { @@ -348,7 +348,7 @@ Result get(const Request& request) { jmethodID getMethod = env->GetStaticMethodID(clientClass, "get", "(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;IJ)" - "Lcom/twilitrealm/dusk/DuskHttpClient$Response;"); + "Ldev/twilitrealm/dusk/DuskHttpClient$Response;"); if (getMethod == nullptr || clear_pending_exception(env)) { env->DeleteLocalRef(clientClass); return { diff --git a/src/f_ap/f_ap_game.cpp b/src/f_ap/f_ap_game.cpp index dc14933b50..2c6cb0a925 100644 --- a/src/f_ap/f_ap_game.cpp +++ b/src/f_ap/f_ap_game.cpp @@ -745,7 +745,8 @@ static void duskExecute() { updateAutoSave(); if (dusk::getSettings().game.recordingMode) { - Z2GetSeqMgr()->bgmAllMute(0, 0); + Z2GetSoundMgr()->getSeqMgr()->getParams()->moveVolume(0.0f, 0); + Z2GetSoundMgr()->getStreamMgr()->getParams()->moveVolume(0.0f, 0); } if (mDoCPd_c::getHoldR(PAD_1) && mDoCPd_c::getTrigX(PAD_1)) {