Discover how frames are encoded, use that knowledge to (finally) get the viewport locked in

This commit is contained in:
2018-03-18 15:39:50 +00:00
parent 2f02c7bbf3
commit 961a213752
4 changed files with 53 additions and 49 deletions

View File

@@ -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: