Discover how frames are encoded, use that knowledge to (finally) get the viewport locked in
This commit is contained in:
@@ -26,7 +26,7 @@ const (
|
||||
|
||||
CellSize = 16 // seems to be
|
||||
|
||||
cellDataOffset = 0x120 // tentatively
|
||||
cellDataOffset = 0x110 // tentatively
|
||||
cellCount = MaxHeight * MaxLength * MaxWidth
|
||||
)
|
||||
|
||||
@@ -68,18 +68,28 @@ func (h Header) MapSetFilename() string {
|
||||
return string(h.SetName[0:idx:idx]) + ".set"
|
||||
}
|
||||
|
||||
type ObjRef struct {
|
||||
AreaByte byte
|
||||
FrameAndUnknownByte byte
|
||||
}
|
||||
|
||||
// The index into a set palette to retrieve the object
|
||||
func (o ObjRef) Index() int {
|
||||
return int(o.AreaByte)
|
||||
}
|
||||
|
||||
func (o ObjRef) Frame() int {
|
||||
return int(o.FrameAndUnknownByte - 0x80)
|
||||
}
|
||||
|
||||
type Cell struct {
|
||||
DoorAndCanisterRelated byte
|
||||
DoorLockAndReactorRelated byte
|
||||
Unknown2 byte
|
||||
Object0SurfaceArea byte
|
||||
Unknown4 byte
|
||||
Object1LeftArea byte
|
||||
Unknown6 byte
|
||||
Object2RightArea byte
|
||||
Unknown8 byte
|
||||
Object3CenterArea byte
|
||||
Unknown10 byte
|
||||
Surface ObjRef
|
||||
Left ObjRef
|
||||
Right ObjRef
|
||||
Center ObjRef
|
||||
Unknown11 byte
|
||||
Unknown12 byte
|
||||
Unknown13 byte
|
||||
@@ -96,21 +106,21 @@ func (c *Cell) At(n int) byte {
|
||||
case 2:
|
||||
return c.Unknown2
|
||||
case 3:
|
||||
return c.Object0SurfaceArea
|
||||
return c.Surface.AreaByte
|
||||
case 4:
|
||||
return c.Unknown4
|
||||
return c.Surface.FrameAndUnknownByte
|
||||
case 5:
|
||||
return c.Object1LeftArea
|
||||
return c.Left.AreaByte
|
||||
case 6:
|
||||
return c.Unknown6
|
||||
return c.Left.FrameAndUnknownByte
|
||||
case 7:
|
||||
return c.Object2RightArea
|
||||
return c.Right.AreaByte
|
||||
case 8:
|
||||
return c.Unknown8
|
||||
return c.Right.FrameAndUnknownByte
|
||||
case 9:
|
||||
return c.Object3CenterArea
|
||||
return c.Center.AreaByte
|
||||
case 10:
|
||||
return c.Unknown10
|
||||
return c.Center.FrameAndUnknownByte
|
||||
case 11:
|
||||
return c.Unknown11
|
||||
case 12:
|
||||
|
@@ -19,13 +19,13 @@ type MapSet struct {
|
||||
Palette []string
|
||||
}
|
||||
|
||||
func LoadSets(dir string) (map[string]MapSet, error) {
|
||||
func LoadSets(dir string) (map[string]*MapSet, error) {
|
||||
fis, err := ioutil.ReadDir(dir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
out := make(map[string]MapSet, len(fis))
|
||||
out := make(map[string]*MapSet, len(fis))
|
||||
|
||||
for _, fi := range fis {
|
||||
filename := filepath.Join(dir, fi.Name())
|
||||
@@ -48,35 +48,34 @@ func LoadSets(dir string) (map[string]MapSet, error) {
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func LoadSet(filename string) (MapSet, error) {
|
||||
var out MapSet
|
||||
var err error
|
||||
func LoadSet(filename string) (*MapSet, error) {
|
||||
out := &MapSet{}
|
||||
|
||||
s, err := asciiscan.New(filename)
|
||||
if err != nil {
|
||||
return out, err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
defer s.Close()
|
||||
|
||||
out.Description, err = s.ConsumeString()
|
||||
if err != nil {
|
||||
return out, err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
out.Defs, err = consumeDefs(s)
|
||||
if err != nil {
|
||||
return out, err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for {
|
||||
str, err := s.ConsumeString()
|
||||
if err != nil {
|
||||
if err == io.EOF {
|
||||
err = nil
|
||||
return out, nil
|
||||
}
|
||||
|
||||
return out, err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
out.Palette = append(out.Palette, str)
|
||||
|
Reference in New Issue
Block a user