From dd403cb0eb17ad84a97a480a563d42db631df1a4 Mon Sep 17 00:00:00 2001 From: Tim Sarbin Date: Wed, 30 Oct 2019 01:09:39 -0400 Subject: [PATCH] Automatically use wine prefix base path with default config on linux --- Core/Engine.go | 21 ++++++++++++++++++--- go.mod | 1 + go.sum | 2 ++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Core/Engine.go b/Core/Engine.go index c413d38f..03b434b9 100644 --- a/Core/Engine.go +++ b/Core/Engine.go @@ -5,6 +5,7 @@ import ( "io/ioutil" "log" "math" + "os" "path" "strings" "sync" @@ -19,6 +20,7 @@ import ( "github.com/essial/OpenDiablo2/UI" "github.com/hajimehoshi/ebiten" + "github.com/mitchellh/go-homedir" ) // EngineConfig defines the configuration for the engine, loaded from config.json @@ -36,7 +38,7 @@ type EngineConfig struct { // Engine is the core OpenDiablo2 engine type Engine struct { - Settings EngineConfig // Engine configuration settings from json file + Settings *EngineConfig // Engine configuration settings from json file Files map[string]string // Map that defines which files are in which MPQs Palettes map[Palettes.Palette]Common.Palette // Color palettes SoundEntries map[string]Sound.SoundEntry // Sound configurations @@ -74,7 +76,7 @@ func CreateEngine() *Engine { } func (v *Engine) loadConfigurationFile() { - log.Println("loading configuration file") + log.Println("Loading configuration file") configJSON, err := ioutil.ReadFile("config.json") if err != nil { log.Fatal(err) @@ -85,7 +87,20 @@ func (v *Engine) loadConfigurationFile() { if err != nil { log.Fatal(err) } - v.Settings = config + v.Settings = &config + // Path fixup for wine-installed diablo 2 in linux + if v.Settings.MpqPath[0] != '/' { + if _, err := os.Stat(v.Settings.MpqPath); os.IsNotExist(err) { + homeDir, _ := homedir.Dir() + newPath := strings.ReplaceAll(v.Settings.MpqPath, `C:\`, homeDir + "/.wine/drive_c/") + newPath = strings.ReplaceAll(newPath, "C:/", homeDir + "/.wine/drive_c/") + newPath = strings.ReplaceAll(newPath, `\`, "/") + if _, err := os.Stat(newPath); !os.IsNotExist(err) { + log.Printf("Detected linux wine installation, path updated to wine prefix path.") + v.Settings.MpqPath = newPath + } + } + } } func (v *Engine) mapMpqFiles() { diff --git a/go.mod b/go.mod index 14c0c451..bc98d89b 100644 --- a/go.mod +++ b/go.mod @@ -5,4 +5,5 @@ go 1.13 require ( github.com/JoshVarga/blast v0.0.0-20180421040937-681c804fb9f0 github.com/hajimehoshi/ebiten v1.9.3 + github.com/mitchellh/go-homedir v1.1.0 ) diff --git a/go.sum b/go.sum index aa290cf7..66fbac91 100644 --- a/go.sum +++ b/go.sum @@ -24,6 +24,8 @@ github.com/jfreymuth/vorbis v1.0.0/go.mod h1:8zy3lUAm9K/rJJk223RKy6vjCZTWC61NA2Q github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= golang.org/x/exp v0.0.0-20180710024300-14dda7b62fcd h1:nLIcFw7GiqKXUS7HiChg6OAYWgASB2H97dZKd1GhDSs= golang.org/x/exp v0.0.0-20180710024300-14dda7b62fcd/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=