From d7d1fabb0abaa9514e50cee0e79bc4cee1dd1fe1 Mon Sep 17 00:00:00 2001 From: stevenhowes <38082088+stevenhowes@users.noreply.github.com> Date: Sun, 27 Mar 2022 20:13:01 +0100 Subject: [PATCH] Q/Q2 PAK file support --- goretro.go | 11 ++++++++++- utils_file.go | 24 +++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/goretro.go b/goretro.go index ff4cee4..ac6382b 100644 --- a/goretro.go +++ b/goretro.go @@ -18,6 +18,7 @@ var Config struct { DebugStatePrintSeconds float64 DataDir string + PakFile string } var Delta float64 @@ -33,7 +34,7 @@ func Init() (*sdl.Renderer, *sdl.Window) { return nil, nil } - fmt.Printf("%d x %d", Config.WindowSize.X, Config.WindowSize.Y) + fmt.Printf("Created window %d x %d\n", Config.WindowSize.X, Config.WindowSize.Y) window, err := sdl.CreateWindow( "GoEscape", @@ -54,6 +55,14 @@ func Init() (*sdl.Renderer, *sdl.Window) { TexList = make(map[string]*sdl.Texture) FileList = make(map[string]*vFile) + if Config.PakFile != "" { + PakLoad(Config.PakFile) + if err != nil { + fmt.Println("loading pak ", Config.PakFile, err) + defer pak.PakClose() + } + + } LastDebugStatePrint = time.Now() return renderer, window diff --git a/utils_file.go b/utils_file.go index 9a8bfc3..c983d42 100644 --- a/utils_file.go +++ b/utils_file.go @@ -11,6 +11,8 @@ package GoRetro import ( "fmt" "os" + + "github.com/stevenhowes/PakGo" ) type vFile struct { @@ -20,6 +22,21 @@ type vFile struct { var FileList map[string]*vFile +var pak PakGo.PakFile + +func PakLoad(filename string) error { + var err error + + fmt.Printf("Loading PAK %s\n", filename) + + pak, err = PakGo.PakLoad(Config.DataDir + filename) + if err != nil { + panic(err) + } + + return err +} + func GetFile(filename string) (*vFile, error) { if val, ok := FileList[filename]; ok { CacheHitsFile++ @@ -27,12 +44,17 @@ func GetFile(filename string) (*vFile, error) { } Data, err := os.ReadFile(Config.DataDir + filename) + if err != nil { + Data, err = pak.ReadFile(filename) + } + vf := vFile{ Size: len(Data), Data: Data, } - fmt.Printf("File Caching %s\n", filename) + fmt.Printf("File Caching %s at %d bytes\n", filename, len(Data)) + FileList[filename] = &vf return &vf, err }