Start investigating the maps

This commit is contained in:
2018-03-17 04:15:40 +00:00
parent 8e2144fda4
commit 087b236547
2 changed files with 203 additions and 5 deletions

View File

@@ -2,10 +2,12 @@ package main
import (
"flag"
"fmt"
"log"
"path/filepath"
"ur.gs/chaos-gate/internal/data"
"ur.gs/chaos-gate/internal/maps"
)
var (
@@ -15,13 +17,19 @@ var (
func main() {
flag.Parse()
loadData()
loadObj()
loadMapsFrom("Maps")
loadMapsFrom("MultiMaps")
}
func loadData() {
dataPath := filepath.Join(*gamePath, "Data")
accountingPath := filepath.Join(dataPath, "Accounting.dat")
genericDataPath := filepath.Join(dataPath, "GenericData.dat")
aniObDefPath := filepath.Join(dataPath, "AniObDef.dat")
objDataPath := filepath.Join(*gamePath, "Obj")
log.Printf("Loading %s...", accountingPath)
accounting, err := data.LoadAccounting(accountingPath)
if err != nil {
@@ -45,6 +53,10 @@ func main() {
}
log.Printf("%s: %+v", genericDataPath, genericData)
}
func loadObj() {
objDataPath := filepath.Join(*gamePath, "Obj")
// TODO: Obj/cpiece.rec isn't loaded by this. Do we need it? How do we know?
log.Printf("Loading %s...", objDataPath)
@@ -53,11 +65,47 @@ func main() {
log.Fatalf("Failed to parse %s: %s", objDataPath, err)
}
inspect := "c_webs"
inspect_obj := inspect + ".obj"
log.Printf("Objects in %s:", objDataPath)
for key, obj := range objects {
log.Printf("\t%s: %+v", key, obj)
if key != inspect_obj {
continue
}
log.Printf(
"\t%s\t%d frames\t%d bytes",
key, obj.ObjectHeader.NumFrames, obj.ObjectHeader.FrameDataSize,
)
}
log.Printf("Tzeentch: %+v", objects["TZEENTCH.OBJ"])
log.Printf("TFrame 0: %+v", objects["TZEENTCH.OBJ"].Frames[0])
log.Printf("%s: %#v", inspect, objects[inspect_obj])
for i, frame := range objects[inspect_obj].Frames {
numPixels := frame.Width * frame.Height
log.Printf("frame %d: w=%d h=%d sz=%d w*h=%d bpp=%v", i, frame.Width, frame.Height, frame.PixelSize, numPixels, float64(frame.PixelSize)/float64(numPixels))
}
}
func loadMapsFrom(part string) {
mapsPath := filepath.Join(*gamePath, part)
log.Printf("Loading maps from %s", mapsPath)
gameMaps, err := maps.LoadGameMaps(mapsPath)
if err != nil {
log.Fatalf("Failed to parse %s/*.{MAP,txt} as game maps: %v", mapsPath, err)
}
log.Printf("Maps in %s:", mapsPath)
for key, gameMap := range gameMaps {
hdr := gameMap.Header
fmt.Printf(
" * `%s`: IsCampaignMap=%v W=%v:%v L=%v:%v SetName=%s\n",
key,
hdr.IsCampaignMap,
hdr.MinWidth, hdr.MaxWidth,
hdr.MinLength, hdr.MaxLength,
string(hdr.SetName[:]),
)
}
}