1.0.0
This commit is contained in:
		| @@ -11,13 +11,13 @@ | ||||
| 	<key>CFBundleIconFile</key> | ||||
| 	<string>icon.icns</string> | ||||
| 	<key>CFBundleShortVersionString</key> | ||||
| 	<string>1.2.4</string> | ||||
| 	<string>1.0.0</string> | ||||
| 	<key>CFBundleSupportedPlatforms</key> | ||||
| 	<array> | ||||
| 		<string>MacOSX</string> | ||||
| 	</array> | ||||
| 	<key>CFBundleVersion</key> | ||||
| 	<string>133</string> | ||||
| 	<string>1</string> | ||||
| 	<key>NSHighResolutionCapable</key> | ||||
| 	<true/> | ||||
| 	<key>NSSupportsAutomaticGraphicsSwitching</key> | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
							
								
								
									
										93
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										93
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,24 +1,9 @@ | ||||
| # Epoch Silicon | ||||
|  | ||||
|  | ||||
|  | ||||
| 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. | ||||
|  | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 210 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 167 KiB | 
							
								
								
									
										8
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								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) | ||||
|   | ||||
| @@ -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", | ||||
|   | ||||
| @@ -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 | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user