diff --git a/EpochSilicon.app/Contents/Info.plist b/EpochSilicon.app/Contents/Info.plist index c9ea5e6..7158491 100644 --- a/EpochSilicon.app/Contents/Info.plist +++ b/EpochSilicon.app/Contents/Info.plist @@ -11,13 +11,13 @@ CFBundleIconFile icon.icns CFBundleShortVersionString - 1.2.4 + 1.0.0 CFBundleSupportedPlatforms MacOSX CFBundleVersion - 133 + 1 NSHighResolutionCapable NSSupportsAutomaticGraphicsSwitching diff --git a/FyneApp.toml b/FyneApp.toml index 2a10f0b..073d3d8 100644 --- a/FyneApp.toml +++ b/FyneApp.toml @@ -2,5 +2,5 @@ Icon = "Icon.png" Name = "EpochSilicon" ID = "com.burkey.epochsilicon" - Version = "1.2.4" - Build = 134 + Version = "1.0.0" + Build = 2 diff --git a/README.md b/README.md index 2ee5be7..8954769 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,9 @@ +# Epoch Silicon + +![](Icon.png) + A user-friendly launcher for Project Epoch on Apple Silicon Macs, with one-click patching of winerosetta, rosettax87 and d9vk. -## Prerequisites - -Before you begin, ensure you have the following: - -* A working version of **CrossOver** installed (the trial version is sufficient and can still be used after expiration). - - You must use CrossOver v25.0.1 or later. Older versions will cause issues. -* A 3.3.5a World of Warcraft client. You can easily get the client from [Project Epoch's download page](https://project-epoch.com/play) -* Place the client in an folder you have rights to. Your user directory (example: `/Users/username/Epoch`) is a good default choice. Avoid spaces in your path! - -## Credits - -All credit for the core translation layer `winerosetta` and `rosettax87` goes to [**@Lifeisawful**](https://github.com/Lifeisawful). This application is merely a Fyne-based GUI wrapper to simplify the patching and launching process. - -[https://github.com/Lifeisawful/winerosetta](https://github.com/Lifeisawful/winerosetta) - -[https://github.com/Lifeisawful/rosettax87](https://github.com/Lifeisawful/rosettax87) - -EpochSilicon is a fork of [https://turtlesilicon.github.io/](TurtleSilicon), credit for the base of the application goes to tairasu. - ## Features * **Apple Silicon Compatibility:** Runs 32-bit DirectX9 World of Warcraft (v3.3.5a) on M1/M2/M3/M4 Macs without "illegal instruction" errors. @@ -28,16 +13,28 @@ EpochSilicon is a fork of [https://turtlesilicon.github.io/](TurtleSilicon), cre * Achieves significant FPS improvements * **Automated Setup:** One-click patching for both CrossOver and Epoch installations. * **Simple Interface:** Easy to use GUI with status indicators and configuration options. - + ## Usage +### Prerequisites + +Before you begin, ensure you have the following: + +* A working version of [CrossOver](https://www.codeweavers.com/crossover) installed (the trial version is sufficient and can still be used after expiration). + - You must use CrossOver v25.0.1 or later. Older versions will cause issues. +* A 3.3.5a World of Warcraft client. You can download the client from [Project Epoch's download page](https://project-epoch.com/play) +* Place the client in an folder you have rights to. Your user directory (example: `/Users/username/Epoch`) is a good default choice. Avoid spaces in your path! + ### Installation +1. [Click here to download the latest release](https://git.burkey.co/eburk/EpochSilicon/releases/download/latest/EpochSilicon.dmg). +2. Double-click `EpochSilicon.dmg`. +3. Drag `EpochSilicon` into `Applications`. You may now close and eject the disk image. +4. Run `EpochSilicon` like you would any other application, using Launchpad, Shortcut, etc. +### Setup -### Method 1: Using the Pre-built Application - -1. Launch `EpochSilicon.app`. +1. Launch `EpochSilicon`. 2. **Set CrossOver Path**: * If CrossOver is installed in the default location (`/Applications/CrossOver.app`), this path will be pre-filled. * Otherwise, click "Set/Change" and navigate to your `CrossOver.app` bundle. @@ -58,7 +55,7 @@ EpochSilicon is a fork of [https://turtlesilicon.github.io/](TurtleSilicon), cre * Once both paths are set, both components are patched, and the RosettaX87 service is running, the "Launch Game" button will become active. Click it. 9. **Enjoy**: Experience a VM free, smoother Project Epoch on your Apple Silicon Mac! -### Method 2: Running from Source Code +## Running from Source Code If you prefer to run the application directly from source code: @@ -77,7 +74,7 @@ If you prefer to run the application directly from source code: go run main.go ``` - Note: This method requires Go to be installed on your system. See the Build Instructions section for details on installing Go and Fyne. + Note: This method requires Go and Fyne to be installed on your system. 4. **Use the application** as described in Method 1 (steps 2-6). @@ -85,41 +82,6 @@ If you prefer to run the application directly from source code: TBD -## Build Instructions - -To build this application yourself, you will need: - -1. **Go**: Make sure you have Go installed on your system. You can download it from [golang.org](https://golang.org/). -2. **Fyne**: Install the Fyne toolkit and its dependencies by following the instructions on the [Fyne website](https://developer.fyne.io/started/). - -Once Go and Fyne are set up, navigate to the project directory in your terminal and run the following command to build the application for Apple Silicon (ARM64) macOS: - -### Option 1: Using the Makefile (Recommended) - -The included Makefile automates the build process and handles copying the required resource files: - -```sh -make -``` - -This will: -1. Build the application for Apple Silicon macOS -2. Automatically copy the rosettax87 and winerosetta directories to the app bundle - -### Option 2: Manual Build - -If you prefer to build manually: - -```sh -GOOS=darwin GOARCH=arm64 fyne package -# Then manually copy the resource directories -cp -R rosettax87 winerosetta EpochSilicon.app/Contents/Resources/ -``` - -In either case, this will create a `EpochSilicon.app` file in the project directory, which you can then run. - -Make sure you have an `Icon.png` file in the root of the project directory before building. - ## Bundled Binaries The `rosettax87` and `winerosetta` components included in this application are precompiled for convenience. If you prefer, you can compile them yourself by following the instructions provided by Lifeisawful on the official repositories: @@ -129,3 +91,14 @@ The `rosettax87` and `winerosetta` components included in this application are p ## License This project is licensed under the MIT License. + +## Credits + +All credit for the core translation layer `winerosetta` and `rosettax87` goes to [**@Lifeisawful**](https://github.com/Lifeisawful). This application is merely a Fyne-based GUI wrapper to simplify the patching and launching process. + +[https://github.com/Lifeisawful/winerosetta](https://github.com/Lifeisawful/winerosetta) + +[https://github.com/Lifeisawful/rosettax87](https://github.com/Lifeisawful/rosettax87) + +EpochSilicon is a fork of [https://turtlesilicon.github.io/](TurtleSilicon), credit for the base of the application goes to tairasu. + diff --git a/img/turtlesilicon-app_v4.png b/img/turtlesilicon-app_v4.png deleted file mode 100644 index a0e581f..0000000 Binary files a/img/turtlesilicon-app_v4.png and /dev/null differ diff --git a/img/turtlesilicon-fps_v2.png b/img/turtlesilicon-fps_v2.png deleted file mode 100644 index bf1aa0f..0000000 Binary files a/img/turtlesilicon-fps_v2.png and /dev/null differ diff --git a/main.go b/main.go index 409c3b4..03a090e 100644 --- a/main.go +++ b/main.go @@ -4,11 +4,13 @@ import ( "epochsilicon/pkg/debug" "epochsilicon/pkg/service" "epochsilicon/pkg/ui" + "epochsilicon/pkg/utils" "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" + "strings" ) -const appVersion = "0.1.0" +const appVersion = "1.0.0" func main() { PEApp := app.NewWithID("com.burkey.epochsilicon") @@ -16,8 +18,6 @@ func main() { PEWindow.Resize(fyne.NewSize(650, 500)) PEWindow.SetFixedSize(true) - /* Check for updates - // TODO: Fix updating go func() { prefs, _ := utils.LoadPrefs() updateInfo, updateAvailable, err := utils.CheckForUpdateWithAssets(appVersion) @@ -40,11 +40,9 @@ func main() { return } - // Show enhanced update dialog ui.ShowUpdateDialog(updateInfo, appVersion, PEWindow) }() - */ content := ui.CreateUI(PEWindow) PEWindow.SetContent(content) diff --git a/pkg/ui/updater.go b/pkg/ui/updater.go index ed3f25e..4f5c0c8 100644 --- a/pkg/ui/updater.go +++ b/pkg/ui/updater.go @@ -114,8 +114,10 @@ func ShowUpdateDialog(updateInfo *utils.UpdateInfo, currentVersion string, myWin return } - progressLabel.SetText("Installing update...") - progressBar.SetValue(1.0) + fyne.DoAndWait(func() { + progressLabel.SetText("Installing update...") + progressBar.SetValue(1.0) + }) // Install update err = utils.InstallUpdate(downloadPath) @@ -124,14 +126,18 @@ func ShowUpdateDialog(updateInfo *utils.UpdateInfo, currentVersion string, myWin debug.Printf("Installation failed: %v", err) // Re-enable close button - d.SetButtons([]fyne.CanvasObject{ - widget.NewButton("Close", func() { d.Hide() }), + fyne.DoAndWait(func() { + d.SetButtons([]fyne.CanvasObject{ + widget.NewButton("Close", func() { d.Hide() }), + }) }) return } // Success - show restart dialog - progressLabel.SetText("Update installed successfully!") + fyne.DoAndWait(func() { + progressLabel.SetText("Update installed successfully!") + }) restartDialog := dialog.NewConfirm( "Update Complete", diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index bba6001..177cbb9 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -163,7 +163,7 @@ type Asset struct { // CheckForUpdateWithAssets returns update information including download assets func CheckForUpdateWithAssets(currentVersion string) (*UpdateInfo, bool, error) { - resp, err := http.Get("https://api.github.com/repos/tairasu/EpochSilicon/releases/latest") + resp, err := http.Get("https://git.burkey.co/api/v1/repos/eburk/epochsilicon/releases/latest") if err != nil { return nil, false, err }