]> git.lizzy.rs Git - mtmap.git/commitdiff
Skip special ids v0.2.3
authorElias Fleckenstein <eliasfleckenstein@web.de>
Sat, 16 Jul 2022 20:43:36 +0000 (22:43 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Sat, 16 Jul 2022 20:43:36 +0000 (22:43 +0200)
deserialize.go
serialize.go
types.go

index 90af77c5cc91d0ed0aedbd365c73973b4349758c..7980ca6ff8968989fd31ae901e3f7b44647b9125 100644 (file)
@@ -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
index 4001dc7535dd22606e71e9568c1c4feaf9efd517..b89a32e7cfc6ee834680c064316ba7a552674e10 100644 (file)
@@ -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))
index abb02e2cb8bcaaf1b9654c588f8cc3a40bce7c19..bd5135010409baeccf7e8988f51ea0898d3d658c 100644 (file)
--- 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
+}