From e63a04085cf4a7a89eca1968bb5c1631f6202815 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sat, 16 Jul 2022 22:43:36 +0200 Subject: [PATCH] Skip special ids --- deserialize.go | 30 ++++++++---------------------- serialize.go | 14 ++++++++++++-- types.go | 21 +++++++++++++++++++++ 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/deserialize.go b/deserialize.go index 90af77c..7980ca6 100644 --- a/deserialize.go +++ b/deserialize.go @@ -4,7 +4,6 @@ import ( "compress/zlib" "encoding/binary" "errors" - "fmt" "github.com/anon55555/mt" "io" ) @@ -18,22 +17,6 @@ var ( ErrInvalidStaticObjVer = errors.New("invalid static object version") ) -type ErrInvalidNodeName struct { - Name string -} - -func (e ErrInvalidNodeName) Error() string { - return fmt.Sprintf("invalid node \"%v\"", e.Name) -} - -type ErrInvalidNodeId struct { - Id mt.Content -} - -func (e ErrInvalidNodeId) Error() string { - return fmt.Sprintf("invalid node %v", e.Id) -} - func Deserialize(r io.Reader, idNameMap map[string]mt.Content) *MapBlk { var blk = &MapBlk{} @@ -261,17 +244,20 @@ func Deserialize(r io.Reader, idNameMap map[string]mt.Content) *MapBlk { } for i := 0; i < 4096; i++ { - name, ok := nameIdMap[blk.Param0[i]] + id := blk.Param0[i] + if isSpecial(id) { + continue + } + + name, ok := nameIdMap[id] if !ok { - panic(ErrInvalidNodeId{blk.Param0[i]}) + panic(ErrInvalidNodeId{id}) } - id, ok := idNameMap[name] + blk.Param0[i], ok = idNameMap[name] if !ok { panic(ErrInvalidNodeName{name}) } - - blk.Param0[i] = id } return blk diff --git a/serialize.go b/serialize.go index 4001dc7..b89a32e 100644 --- a/serialize.go +++ b/serialize.go @@ -153,11 +153,21 @@ func Serialize(blk *MapBlk, w io.Writer, nameIdMap map[mt.Content]string) { var localNameIdMap = make(map[mt.Content]string) for i := 0; i < 4096; i++ { - if _, ok := localNameIdMap[blk.Param0[i]]; ok { + id := blk.Param0[i] + if isSpecial(id) { continue } - localNameIdMap[blk.Param0[i]] = nameIdMap[blk.Param0[i]] + if _, ok := localNameIdMap[id]; ok { + continue + } + + name, ok := nameIdMap[id] + if !ok { + panic(ErrInvalidNodeId{id}) + } + + localNameIdMap[id] = name } var nameIdMapCount = uint16(len(localNameIdMap)) diff --git a/types.go b/types.go index abb02e2..bd51350 100644 --- a/types.go +++ b/types.go @@ -1,6 +1,7 @@ package mtmap import ( + "fmt" "github.com/anon55555/mt" ) @@ -34,3 +35,23 @@ type StaticObj struct { Pos [3]float32 Data string } + +type ErrInvalidNodeName struct { + Name string +} + +func (e ErrInvalidNodeName) Error() string { + return fmt.Sprintf("invalid node \"%v\"", e.Name) +} + +type ErrInvalidNodeId struct { + Id mt.Content +} + +func (e ErrInvalidNodeId) Error() string { + return fmt.Sprintf("invalid node %v", e.Id) +} + +func isSpecial(id mt.Content) bool { + return id >= 125 && id <= 127 +} -- 2.44.0