1.0.0
This commit is contained in:
@@ -11,13 +11,13 @@
|
|||||||
<key>CFBundleIconFile</key>
|
<key>CFBundleIconFile</key>
|
||||||
<string>icon.icns</string>
|
<string>icon.icns</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.2.4</string>
|
<string>1.0.0</string>
|
||||||
<key>CFBundleSupportedPlatforms</key>
|
<key>CFBundleSupportedPlatforms</key>
|
||||||
<array>
|
<array>
|
||||||
<string>MacOSX</string>
|
<string>MacOSX</string>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>133</string>
|
<string>1</string>
|
||||||
<key>NSHighResolutionCapable</key>
|
<key>NSHighResolutionCapable</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
||||||
|
@@ -2,5 +2,5 @@
|
|||||||
Icon = "Icon.png"
|
Icon = "Icon.png"
|
||||||
Name = "EpochSilicon"
|
Name = "EpochSilicon"
|
||||||
ID = "com.burkey.epochsilicon"
|
ID = "com.burkey.epochsilicon"
|
||||||
Version = "1.2.4"
|
Version = "1.0.0"
|
||||||
Build = 134
|
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.
|
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
|
## Features
|
||||||
|
|
||||||
* **Apple Silicon Compatibility:** Runs 32-bit DirectX9 World of Warcraft (v3.3.5a) on M1/M2/M3/M4 Macs without "illegal instruction" errors.
|
* **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
|
* Achieves significant FPS improvements
|
||||||
* **Automated Setup:** One-click patching for both CrossOver and Epoch installations.
|
* **Automated Setup:** One-click patching for both CrossOver and Epoch installations.
|
||||||
* **Simple Interface:** Easy to use GUI with status indicators and configuration options.
|
* **Simple Interface:** Easy to use GUI with status indicators and configuration options.
|
||||||
|
|
||||||
## Usage
|
## 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
|
### 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`.
|
||||||
|
|
||||||
1. Launch `EpochSilicon.app`.
|
|
||||||
2. **Set CrossOver Path**:
|
2. **Set CrossOver Path**:
|
||||||
* If CrossOver is installed in the default location (`/Applications/CrossOver.app`), this path will be pre-filled.
|
* 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.
|
* 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.
|
* 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!
|
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:
|
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
|
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).
|
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
|
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
|
## 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:
|
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
|
## License
|
||||||
|
|
||||||
This project is licensed under the MIT 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/debug"
|
||||||
"epochsilicon/pkg/service"
|
"epochsilicon/pkg/service"
|
||||||
"epochsilicon/pkg/ui"
|
"epochsilicon/pkg/ui"
|
||||||
|
"epochsilicon/pkg/utils"
|
||||||
"fyne.io/fyne/v2"
|
"fyne.io/fyne/v2"
|
||||||
"fyne.io/fyne/v2/app"
|
"fyne.io/fyne/v2/app"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const appVersion = "0.1.0"
|
const appVersion = "1.0.0"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
PEApp := app.NewWithID("com.burkey.epochsilicon")
|
PEApp := app.NewWithID("com.burkey.epochsilicon")
|
||||||
@@ -16,8 +18,6 @@ func main() {
|
|||||||
PEWindow.Resize(fyne.NewSize(650, 500))
|
PEWindow.Resize(fyne.NewSize(650, 500))
|
||||||
PEWindow.SetFixedSize(true)
|
PEWindow.SetFixedSize(true)
|
||||||
|
|
||||||
/* Check for updates
|
|
||||||
// TODO: Fix updating
|
|
||||||
go func() {
|
go func() {
|
||||||
prefs, _ := utils.LoadPrefs()
|
prefs, _ := utils.LoadPrefs()
|
||||||
updateInfo, updateAvailable, err := utils.CheckForUpdateWithAssets(appVersion)
|
updateInfo, updateAvailable, err := utils.CheckForUpdateWithAssets(appVersion)
|
||||||
@@ -40,11 +40,9 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Show enhanced update dialog
|
// Show enhanced update dialog
|
||||||
ui.ShowUpdateDialog(updateInfo, appVersion, PEWindow)
|
ui.ShowUpdateDialog(updateInfo, appVersion, PEWindow)
|
||||||
}()
|
}()
|
||||||
*/
|
|
||||||
|
|
||||||
content := ui.CreateUI(PEWindow)
|
content := ui.CreateUI(PEWindow)
|
||||||
PEWindow.SetContent(content)
|
PEWindow.SetContent(content)
|
||||||
|
@@ -114,8 +114,10 @@ func ShowUpdateDialog(updateInfo *utils.UpdateInfo, currentVersion string, myWin
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
progressLabel.SetText("Installing update...")
|
fyne.DoAndWait(func() {
|
||||||
progressBar.SetValue(1.0)
|
progressLabel.SetText("Installing update...")
|
||||||
|
progressBar.SetValue(1.0)
|
||||||
|
})
|
||||||
|
|
||||||
// Install update
|
// Install update
|
||||||
err = utils.InstallUpdate(downloadPath)
|
err = utils.InstallUpdate(downloadPath)
|
||||||
@@ -124,14 +126,18 @@ func ShowUpdateDialog(updateInfo *utils.UpdateInfo, currentVersion string, myWin
|
|||||||
debug.Printf("Installation failed: %v", err)
|
debug.Printf("Installation failed: %v", err)
|
||||||
|
|
||||||
// Re-enable close button
|
// Re-enable close button
|
||||||
d.SetButtons([]fyne.CanvasObject{
|
fyne.DoAndWait(func() {
|
||||||
widget.NewButton("Close", func() { d.Hide() }),
|
d.SetButtons([]fyne.CanvasObject{
|
||||||
|
widget.NewButton("Close", func() { d.Hide() }),
|
||||||
|
})
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Success - show restart dialog
|
// Success - show restart dialog
|
||||||
progressLabel.SetText("Update installed successfully!")
|
fyne.DoAndWait(func() {
|
||||||
|
progressLabel.SetText("Update installed successfully!")
|
||||||
|
})
|
||||||
|
|
||||||
restartDialog := dialog.NewConfirm(
|
restartDialog := dialog.NewConfirm(
|
||||||
"Update Complete",
|
"Update Complete",
|
||||||
|
@@ -163,7 +163,7 @@ type Asset struct {
|
|||||||
|
|
||||||
// CheckForUpdateWithAssets returns update information including download assets
|
// CheckForUpdateWithAssets returns update information including download assets
|
||||||
func CheckForUpdateWithAssets(currentVersion string) (*UpdateInfo, bool, error) {
|
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 {
|
if err != nil {
|
||||||
return nil, false, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user