Q/Q2 PAK file support

This commit is contained in:
stevenhowes
2022-03-27 20:13:01 +01:00
parent e9a53fbf05
commit d7d1fabb0a
2 changed files with 33 additions and 2 deletions
+10 -1
View File
@@ -18,6 +18,7 @@ var Config struct {
DebugStatePrintSeconds float64 DebugStatePrintSeconds float64
DataDir string DataDir string
PakFile string
} }
var Delta float64 var Delta float64
@@ -33,7 +34,7 @@ func Init() (*sdl.Renderer, *sdl.Window) {
return nil, nil 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( window, err := sdl.CreateWindow(
"GoEscape", "GoEscape",
@@ -54,6 +55,14 @@ func Init() (*sdl.Renderer, *sdl.Window) {
TexList = make(map[string]*sdl.Texture) TexList = make(map[string]*sdl.Texture)
FileList = make(map[string]*vFile) 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() LastDebugStatePrint = time.Now()
return renderer, window return renderer, window
+23 -1
View File
@@ -11,6 +11,8 @@ package GoRetro
import ( import (
"fmt" "fmt"
"os" "os"
"github.com/stevenhowes/PakGo"
) )
type vFile struct { type vFile struct {
@@ -20,6 +22,21 @@ type vFile struct {
var FileList map[string]*vFile 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) { func GetFile(filename string) (*vFile, error) {
if val, ok := FileList[filename]; ok { if val, ok := FileList[filename]; ok {
CacheHitsFile++ CacheHitsFile++
@@ -27,12 +44,17 @@ func GetFile(filename string) (*vFile, error) {
} }
Data, err := os.ReadFile(Config.DataDir + filename) Data, err := os.ReadFile(Config.DataDir + filename)
if err != nil {
Data, err = pak.ReadFile(filename)
}
vf := vFile{ vf := vFile{
Size: len(Data), Size: len(Data),
Data: 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 FileList[filename] = &vf
return &vf, err return &vf, err
} }