summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2022-07-16 22:43:36 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2022-07-16 22:43:36 +0200
commite63a04085cf4a7a89eca1968bb5c1631f6202815 (patch)
tree79a3a5b4802f6ded9de44306a260dd2370b27da3
parent164261fab87997d7363c79aa9ad71a48866c6c2b (diff)
downloadmtmap-e63a04085cf4a7a89eca1968bb5c1631f6202815.tar.xz
Skip special idsv0.2.3
-rw-r--r--deserialize.go30
-rw-r--r--serialize.go14
-rw-r--r--types.go21
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
+}