summaryrefslogtreecommitdiff
path: root/mapblk.go
diff options
context:
space:
mode:
authoranon5 <anon5clam@protonmail.com>2021-06-21 18:47:26 +0000
committeranon5 <anon5clam@protonmail.com>2021-06-21 18:47:26 +0000
commit425da65ed46061303604610bb539d6495b2b1f3f (patch)
tree10ae3e665132c369ce0207676321cef870679923 /mapblk.go
parent9f239d341ef46b656dda759020da87bdd0606344 (diff)
Add high-level protocol (de)serialization
Diffstat (limited to 'mapblk.go')
-rw-r--r--mapblk.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/mapblk.go b/mapblk.go
new file mode 100644
index 0000000..f40a504
--- /dev/null
+++ b/mapblk.go
@@ -0,0 +1,56 @@
+package mt
+
+type MapBlkFlags uint8
+
+const (
+ BlkIsUnderground MapBlkFlags = 1 << iota
+ BlkDayNightDiff
+ BlkLightExpired
+ BlkNotGenerated
+)
+
+type LitFromBlks uint16
+
+const AlwaysLitFrom LitFromBlks = 0xf000
+
+func LitFrom(d Dir, b LightBank) LitFromBlks {
+ return 1 << (uint8(d) + uint8(6*b))
+}
+
+type MapBlk struct {
+ Flags MapBlkFlags
+ LitFrom LitFromBlks
+
+ //mt:const uint8(2) // Size of param0 in bytes.
+ //mt:const uint8(1 + 1) // Size of param1 and param2 combined, in bytes.
+
+ //mt:zlib
+ Param0 [4096]Content
+ Param1 [4096]uint8
+ Param2 [4096]uint8
+ //mt:end
+
+ NodeMetas map[uint16]*NodeMeta
+
+ // net info
+ //mt:const uint8(2) // version
+}
+
+// Pos2BlkPos converts a node position to a MapBlk position and index.
+func Pos2Blkpos(pos [3]int16) (blkpos [3]int16, i uint16) {
+ for j := range pos {
+ blkpos[j] = pos[j] >> 4
+ i |= uint16(pos[j]&0xf) << (4 * j)
+ }
+
+ return
+}
+
+// BlkPos2Pos converts a MapBlk position and index to a node position.
+func Blkpos2Pos(blkpos [3]int16, i uint16) (pos [3]int16) {
+ for j := range pos {
+ pos[j] = blkpos[j]<<4 | int16(i>>(4*j)&0xf)
+ }
+
+ return
+}