]> git.lizzy.rs Git - mt.git/commitdiff
Add high-level protocol (de)serialization
authoranon5 <anon5clam@protonmail.com>
Mon, 21 Jun 2021 18:47:26 +0000 (18:47 +0000)
committeranon5 <anon5clam@protonmail.com>
Mon, 21 Jun 2021 18:47:26 +0000 (18:47 +0000)
51 files changed:
ao.go [new file with mode: 0644]
aocmds [new file with mode: 0644]
aocmds_cmdno.go [new file with mode: 0644]
auth.go [new file with mode: 0644]
bytereader.go [new file with mode: 0644]
cmd.go [new file with mode: 0644]
cmd.sh [new file with mode: 0755]
cmd/proxy/proxy.go [new file with mode: 0644]
cmdno.sh [new file with mode: 0755]
cmds.go [new file with mode: 0644]
compression.go [new file with mode: 0644]
deserialize.fmt [new file with mode: 0644]
dir.go [new file with mode: 0644]
internal/mkserialize/.gitignore [new file with mode: 0644]
internal/mkserialize/go.mod [new file with mode: 0644]
internal/mkserialize/go.sum [new file with mode: 0644]
internal/mkserialize/mkserialize.go [new file with mode: 0644]
itemdef.go [new file with mode: 0644]
light.go [new file with mode: 0644]
mapblk.go [new file with mode: 0644]
minimap.go [new file with mode: 0644]
mkpktinfos.sh [new file with mode: 0755]
mkserialize.sh [new file with mode: 0755]
mt.go
nodebox.go [new file with mode: 0644]
nodedef.go [new file with mode: 0644]
nodemeta.go [new file with mode: 0644]
pktinfos [new file with mode: 0644]
pktinfos.go [new file with mode: 0644]
playerpos.go [new file with mode: 0644]
pointedthing.go [new file with mode: 0644]
pos.go [new file with mode: 0644]
proto.go [new file with mode: 0644]
rudp/cmd/proxy/proxy.go [new file with mode: 0644]
rudp/proxy/proxy.go [deleted file]
serialize.fmt [new file with mode: 0644]
serialize.go [new file with mode: 0644]
sound.go [new file with mode: 0644]
stack.go
texture.go [new file with mode: 0644]
tileanim.go [new file with mode: 0644]
tiledef.go [new file with mode: 0644]
tocltcmds [new file with mode: 0644]
tocltcmds.go [new file with mode: 0644]
tocltcmds_cmdno.go [new file with mode: 0644]
toolcaps.go [new file with mode: 0644]
tosrvcmds [new file with mode: 0644]
tosrvcmds.go [new file with mode: 0644]
tosrvcmds_cmdno.go [new file with mode: 0644]
vec.go [new file with mode: 0644]
zerialize.go [new file with mode: 0644]

diff --git a/ao.go b/ao.go
new file mode 100644 (file)
index 0000000..40b9983
--- /dev/null
+++ b/ao.go
@@ -0,0 +1,201 @@
+package mt
+
+import (
+       "fmt"
+       "image/color"
+       "io"
+)
+
+type AOID uint16
+
+type aoType uint8
+
+const genericCAO aoType = 101
+
+type AOInitData struct {
+       // Version.
+       //mt:const uint8(1)
+
+       // For players.
+       Name     string
+       IsPlayer bool
+
+       ID AOID
+
+       Pos
+       Rot [3]float32
+
+       HP uint16
+
+       // See (de)serialize.fmt.
+       Msgs []AOMsg
+}
+
+type AOProps struct {
+       // Version.
+       //mt:const uint8(4)
+
+       MaxHP            uint16 // Player only.
+       CollideWithNodes bool
+       Weight           float32 // deprecated
+       ColBox, SelBox   Box
+       Pointable        bool
+       Visual           string
+       VisualSize       [3]float32
+       Textures         []Texture
+       SpritesheetSize  [2]int16 // in sprites.
+       SpritePos        [2]int16 // in sprite sheet.
+       Visible          bool
+       MakeFootstepSnds bool
+       RotateSpeed      float32 // in radians per second.
+       Mesh             string
+       Colors           []color.NRGBA
+       CollideWithAOs   bool
+       StepHeight       float32
+       FaceRotateDir    bool
+       FaceRotateDirOff float32 // in degrees.
+       BackfaceCull     bool
+       Nametag          string
+       NametagColor     color.NRGBA
+       FaceRotateSpeed  float32 // in degrees per second.
+       Infotext         string
+       Itemstring       string
+       Glow             int8
+       MaxBreath        uint16  // Player only.
+       EyeHeight        float32 // Player only.
+       ZoomFOV          float32 // in degrees. Player only.
+       UseTextureAlpha  bool
+       DmgTextureMod    Texture // suffix
+       Shaded           bool
+       ShowOnMinimap    bool
+       NametagBG        color.NRGBA
+}
+
+type AOPos struct {
+       Pos
+       Vel, Acc Vec
+       Rot      [3]float32
+
+       Interpolate    bool
+       End            bool
+       UpdateInterval float32
+}
+
+type AOSprite struct {
+       Frame0          [2]int16
+       Frames          uint16
+       FrameDuration   float32
+       ViewAngleFrames bool
+}
+
+type AOAnim struct {
+       Frames [2]int32
+       Speed  float32
+       Blend  float32
+       NoLoop bool
+}
+
+type AOBonePos struct {
+       Pos Vec
+       Rot [3]float32
+}
+
+type AOAttach struct {
+       ParentID     AOID
+       Bone         string
+       Pos          Vec
+       Rot          [3]float32
+       ForceVisible bool
+}
+
+type AOPhysOverride struct {
+       Walk, Jump, Gravity float32
+
+       // Player only.
+       NoSneak, NoSneakGlitch, OldSneak bool
+}
+
+type AOCmdProps struct {
+       Props AOProps
+}
+
+type AOCmdPos struct {
+       Pos AOPos
+}
+
+type AOCmdTextureMod struct {
+       Mod Texture // suffix
+}
+
+type AOCmdSprite struct {
+       Sprite AOSprite
+}
+
+type AOCmdHP struct {
+       HP uint16
+}
+
+type AOCmdArmorGroups struct {
+       Armor []Group
+}
+
+type AOCmdAnim struct {
+       Anim AOAnim
+}
+
+type AOCmdBonePos struct {
+       Bone string
+       Pos  AOBonePos
+}
+
+type AOCmdAttach struct {
+       Attach AOAttach
+}
+
+type AOCmdPhysOverride struct {
+       Phys AOPhysOverride
+}
+
+type AOCmdSpawnInfant struct {
+       ID AOID
+
+       // Type.
+       //mt:const genericCAO
+}
+
+type AOCmdAnimSpeed struct {
+       Speed float32
+}
+
+//go:generate ./cmdno.sh aocmds AOCmd ao uint8 AOMsg newAOMsg
+
+type AOMsg interface {
+       aoCmdNo() uint8
+}
+
+func writeAOMsg(w io.Writer, msg AOMsg) error {
+       if _, err := w.Write([]byte{msg.aoCmdNo()}); err != nil {
+               return err
+       }
+       return serialize(w, msg)
+}
+
+func readAOMsg(r io.Reader) (AOMsg, error) {
+       buf := make([]byte, 1)
+       if _, err := io.ReadFull(r, buf); err != nil {
+               return nil, err
+       }
+       newCmd, ok := newAOMsg[buf[0]]
+       if !ok {
+               return nil, fmt.Errorf("unsupported ao msg: %d", buf[0])
+       }
+       msg := newCmd()
+       return msg, deserialize(r, msg)
+}
+
+type IDAOMsg struct {
+       ID AOID
+       //mt:lenhdr 16
+       Msg AOMsg
+       //mt:end
+}
diff --git a/aocmds b/aocmds
new file mode 100644 (file)
index 0000000..a04350f
--- /dev/null
+++ b/aocmds
@@ -0,0 +1,12 @@
+0      Props
+1      Pos
+2      TextureMod
+3      Sprite
+4      HP
+5      ArmorGroups
+6      Anim
+7      BonePos
+8      Attach
+9      PhysOverride
+11     SpawnInfant
+12     AnimSpeed
diff --git a/aocmds_cmdno.go b/aocmds_cmdno.go
new file mode 100644 (file)
index 0000000..6d051b5
--- /dev/null
@@ -0,0 +1,31 @@
+// Code generated by cmdno.sh. DO NOT EDIT.
+
+package mt
+
+func (*AOCmdProps) aoCmdNo() uint8        { return 0 }
+func (*AOCmdPos) aoCmdNo() uint8          { return 1 }
+func (*AOCmdTextureMod) aoCmdNo() uint8   { return 2 }
+func (*AOCmdSprite) aoCmdNo() uint8       { return 3 }
+func (*AOCmdHP) aoCmdNo() uint8           { return 4 }
+func (*AOCmdArmorGroups) aoCmdNo() uint8  { return 5 }
+func (*AOCmdAnim) aoCmdNo() uint8         { return 6 }
+func (*AOCmdBonePos) aoCmdNo() uint8      { return 7 }
+func (*AOCmdAttach) aoCmdNo() uint8       { return 8 }
+func (*AOCmdPhysOverride) aoCmdNo() uint8 { return 9 }
+func (*AOCmdSpawnInfant) aoCmdNo() uint8  { return 11 }
+func (*AOCmdAnimSpeed) aoCmdNo() uint8    { return 12 }
+
+var newAOMsg = map[uint8]func() AOMsg{
+       0:  func() AOMsg { return new(AOCmdProps) },
+       1:  func() AOMsg { return new(AOCmdPos) },
+       2:  func() AOMsg { return new(AOCmdTextureMod) },
+       3:  func() AOMsg { return new(AOCmdSprite) },
+       4:  func() AOMsg { return new(AOCmdHP) },
+       5:  func() AOMsg { return new(AOCmdArmorGroups) },
+       6:  func() AOMsg { return new(AOCmdAnim) },
+       7:  func() AOMsg { return new(AOCmdBonePos) },
+       8:  func() AOMsg { return new(AOCmdAttach) },
+       9:  func() AOMsg { return new(AOCmdPhysOverride) },
+       11: func() AOMsg { return new(AOCmdSpawnInfant) },
+       12: func() AOMsg { return new(AOCmdAnimSpeed) },
+}
diff --git a/auth.go b/auth.go
new file mode 100644 (file)
index 0000000..5c2df14
--- /dev/null
+++ b/auth.go
@@ -0,0 +1,9 @@
+package mt
+
+type AuthMethods uint32
+
+const (
+       LegacyPasswd AuthMethods = 1 << iota
+       SRP
+       FirstSRP
+)
diff --git a/bytereader.go b/bytereader.go
new file mode 100644 (file)
index 0000000..77447d0
--- /dev/null
@@ -0,0 +1,13 @@
+package mt
+
+import "io"
+
+type byteReader struct {
+       io.Reader
+}
+
+func (br byteReader) ReadByte() (byte, error) {
+       buf := make([]byte, 1)
+       _, err := io.ReadFull(br, buf)
+       return buf[0], err
+}
diff --git a/cmd.go b/cmd.go
new file mode 100644 (file)
index 0000000..db6b912
--- /dev/null
+++ b/cmd.go
@@ -0,0 +1,85 @@
+// Code generated by cmd.sh. DO NOT EDIT.
+
+package mt
+
+func (*ToCltHello) cmd()                 {}
+func (*ToCltAcceptAuth) cmd()            {}
+func (*ToCltAcceptSudoMode) cmd()        {}
+func (*ToCltDenySudoMode) cmd()          {}
+func (*ToCltDisco) cmd()                 {}
+func (*ToCltBlkData) cmd()               {}
+func (*ToCltAddNode) cmd()               {}
+func (*ToCltRemoveNode) cmd()            {}
+func (*ToCltInv) cmd()                   {}
+func (*ToCltTimeOfDay) cmd()             {}
+func (*ToCltCSMRestrictionFlags) cmd()   {}
+func (*ToCltAddPlayerVel) cmd()          {}
+func (*ToCltMediaPush) cmd()             {}
+func (*ToCltChatMsg) cmd()               {}
+func (*ToCltAORmAdd) cmd()               {}
+func (*ToCltAOMsgs) cmd()                {}
+func (*ToCltHP) cmd()                    {}
+func (*ToCltMovePlayer) cmd()            {}
+func (*ToCltDiscoLegacy) cmd()           {}
+func (*ToCltFOV) cmd()                   {}
+func (*ToCltDeathScreen) cmd()           {}
+func (*ToCltMedia) cmd()                 {}
+func (*ToCltNodeDefs) cmd()              {}
+func (*ToCltAnnounceMedia) cmd()         {}
+func (*ToCltItemDefs) cmd()              {}
+func (*ToCltPlaySound) cmd()             {}
+func (*ToCltStopSound) cmd()             {}
+func (*ToCltPrivs) cmd()                 {}
+func (*ToCltInvFormspec) cmd()           {}
+func (*ToCltDetachedInv) cmd()           {}
+func (*ToCltShowFormspec) cmd()          {}
+func (*ToCltMovement) cmd()              {}
+func (*ToCltSpawnParticle) cmd()         {}
+func (*ToCltAddParticleSpawner) cmd()    {}
+func (*ToCltAddHUD) cmd()                {}
+func (*ToCltRmHUD) cmd()                 {}
+func (*ToCltChangeHUD) cmd()             {}
+func (*ToCltHUDFlags) cmd()              {}
+func (*ToCltSetHotbarParam) cmd()        {}
+func (*ToCltBreath) cmd()                {}
+func (*ToCltSkyParams) cmd()             {}
+func (*ToCltOverrideDayNightRatio) cmd() {}
+func (*ToCltLocalPlayerAnim) cmd()       {}
+func (*ToCltEyeOffset) cmd()             {}
+func (*ToCltDelParticleSpawner) cmd()    {}
+func (*ToCltCloudParams) cmd()           {}
+func (*ToCltFadeSound) cmd()             {}
+func (*ToCltUpdatePlayerList) cmd()      {}
+func (*ToCltModChanMsg) cmd()            {}
+func (*ToCltModChanSig) cmd()            {}
+func (*ToCltNodeMetasChanged) cmd()      {}
+func (*ToCltSunParams) cmd()             {}
+func (*ToCltMoonParams) cmd()            {}
+func (*ToCltStarParams) cmd()            {}
+func (*ToCltSRPBytesSaltB) cmd()         {}
+func (*ToCltFormspecPrepend) cmd()       {}
+func (*ToCltMinimapModes) cmd()          {}
+
+func (*ToSrvNil) cmd()            {}
+func (*ToSrvInit) cmd()           {}
+func (*ToSrvInit2) cmd()          {}
+func (*ToSrvModChanJoin) cmd()    {}
+func (*ToSrvModChanLeave) cmd()   {}
+func (*ToSrvModChanMsg) cmd()     {}
+func (*ToSrvPlayerPos) cmd()      {}
+func (*ToSrvGotBlks) cmd()        {}
+func (*ToSrvDeletedBlks) cmd()    {}
+func (*ToSrvInvAction) cmd()      {}
+func (*ToSrvChatMsg) cmd()        {}
+func (*ToSrvFallDmg) cmd()        {}
+func (*ToSrvSelectItem) cmd()     {}
+func (*ToSrvRespawn) cmd()        {}
+func (*ToSrvInteract) cmd()       {}
+func (*ToSrvRemovedSounds) cmd()  {}
+func (*ToSrvNodeMetaFields) cmd() {}
+func (*ToSrvInvFields) cmd()      {}
+func (*ToSrvReqMedia) cmd()       {}
+func (*ToSrvCltReady) cmd()       {}
+func (*ToSrvFirstSRP) cmd()       {}
+func (*ToSrvSRPBytesA) cmd()      {}
+func (*ToSrvSRPBytesM) cmd()      {}
diff --git a/cmd.sh b/cmd.sh
new file mode 100755 (executable)
index 0000000..ed887f3
--- /dev/null
+++ b/cmd.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+(
+       echo // Code generated by cmd.sh. DO NOT EDIT.
+       echo
+       echo package mt
+       echo
+       awk '{ print "func (*ToClt"$2") cmd() {}" }' tocltcmds
+       echo
+       awk '{ print "func (*ToSrv"$2") cmd() {}" }' tosrvcmds
+) | gofmt >cmd.go
diff --git a/cmd/proxy/proxy.go b/cmd/proxy/proxy.go
new file mode 100644 (file)
index 0000000..33cc354
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+Proxy is a Minetest proxy server
+supporting multiple concurrent connections.
+
+Usage:
+       proxy dial:port listen:port
+where dial:port is the server address
+and listen:port is the address to listen on.
+*/
+package main
+
+import (
+       "errors"
+       "fmt"
+       "log"
+       "net"
+       "os"
+
+       "github.com/anon55555/mt"
+)
+
+func main() {
+       if len(os.Args) != 3 {
+               fmt.Fprintln(os.Stderr, "usage: proxy dial:port listen:port")
+               os.Exit(1)
+       }
+
+       srvaddr, err := net.ResolveUDPAddr("udp", os.Args[1])
+       if err != nil {
+               log.Fatal(err)
+       }
+
+       lc, err := net.ListenPacket("udp", os.Args[2])
+       if err != nil {
+               log.Fatal(err)
+       }
+       defer lc.Close()
+
+       l := mt.Listen(lc)
+       for {
+               clt, err := l.Accept()
+               if err != nil {
+                       log.Print(err)
+                       continue
+               }
+
+               log.Print(clt.RemoteAddr().String() + " connected")
+
+               conn, err := net.DialUDP("udp", nil, srvaddr)
+               if err != nil {
+                       log.Print(err)
+                       continue
+               }
+               srv := mt.Connect(conn)
+
+               go proxy(clt, srv)
+               go proxy(srv, clt)
+       }
+}
+
+func proxy(src, dest mt.Peer) {
+       s := fmt.Sprint(src.ID(), " (", src.RemoteAddr(), "): ")
+
+       for {
+               pkt, err := src.Recv()
+               if err != nil {
+                       if errors.Is(err, net.ErrClosed) {
+                               if err := src.WhyClosed(); err != nil {
+                                       log.Print(s, "disconnected: ", err)
+                               } else {
+                                       log.Print(s, "disconnected")
+                               }
+                               break
+                       }
+
+                       log.Print(s, err)
+                       continue
+               }
+
+               if _, err := dest.Send(pkt); err != nil {
+                       log.Print(err)
+               }
+       }
+
+       dest.Close()
+}
diff --git a/cmdno.sh b/cmdno.sh
new file mode 100755 (executable)
index 0000000..186df7b
--- /dev/null
+++ b/cmdno.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+(
+       echo // Code generated by cmdno.sh. DO NOT EDIT.
+       echo
+       echo package mt
+       echo
+       awk '{ print "func (*'$2'"$2") '$3'CmdNo() '$4' { return "$1" }" }' $1
+       echo
+       echo "var $6 = map[$4]func() $5{"
+       awk '{ print "\t"$1": func() '$5' { return new('$2'"$2") }," }' $1
+       echo }
+) | gofmt >$1_cmdno.go
diff --git a/cmds.go b/cmds.go
new file mode 100644 (file)
index 0000000..7a4f6bd
--- /dev/null
+++ b/cmds.go
@@ -0,0 +1,13 @@
+//go:generate ./mkpktinfos.sh
+//go:generate ./cmd.sh
+
+package mt
+
+import (
+       "github.com/anon55555/mt/rudp"
+)
+
+type Cmd interface {
+       DefaultPktInfo() rudp.PktInfo
+       cmd()
+}
diff --git a/compression.go b/compression.go
new file mode 100644 (file)
index 0000000..b7fafb9
--- /dev/null
@@ -0,0 +1,7 @@
+package mt
+
+type CompressionModes uint16
+
+const (
+       _ CompressionModes = 1 << iota
+)
diff --git a/deserialize.fmt b/deserialize.fmt
new file mode 100644 (file)
index 0000000..d2a7c67
--- /dev/null
@@ -0,0 +1,121 @@
+       func readBuf(r io.Reader, n int) []byte {
+               buf := make([]byte, n)
+               _, err := io.ReadFull(r, buf)
+               chk(err)
+               return buf
+       }
+       
+       func read8 (r io.Reader) uint8  { return readBuf(r, 1)[0] }
+       func read16(r io.Reader) uint16 { return be.Uint16(readBuf(r, 2)) }
+       func read32(r io.Reader) uint32 { return be.Uint32(readBuf(r, 4)) }
+       func read64(r io.Reader) uint64 { return be.Uint64(readBuf(r, 8)) }
+
+byte   *p = read8(r)
+uint8  *p = read8(r)
+uint16 *p = read16(r)
+uint32 *p = read32(r)
+uint64 *p = read64(r)
+
+int8   *p = int8(read8(r))
+int16  *p = int16(read16(r))
+int32  *p = int32(read32(r))
+int64  *p = int64(read64(r))
+
+bool   switch n := read8(r); n {
+       case 0:
+               *p = false
+       case 1:
+               *p = true
+       default:
+               chk(fmt.Errorf("invalid bool: %d", n))
+       }
+
+float32        *p = math.Float32frombits(read32(r))
+float64        *p = math.Float64frombits(read64(r))
+
+AOMsg  {
+               var err error
+               *p, err = readAOMsg(r)
+               chk(err)
+       }
+
+image/color.NRGBA      *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+
+map[uint16]*NodeMeta   {
+               r, err := zlib.NewReader(byteReader{r})
+               chk(err)
+
+               switch ver := read8(r); ver {
+               case 0:
+                       *p = nil
+               case 2:
+                       n := read16(r)
+                       *p = make(map[uint16]*NodeMeta, n)
+                       for ; n > 0; n-- {
+                               pos := read16(r)
+                               nm := new(NodeMeta)
+                               chk(deserialize(r, nm))
+                               (*p)[pos] = nm
+                       }
+               default:
+                       chk(fmt.Errorf("unsupported nodemetas version: %d", ver))
+               }
+
+               chk(r.Close())
+       }
+
+map[[3]int16]*NodeMeta {
+               r, err := zlib.NewReader(byteReader{r})
+               chk(err)
+
+               switch ver := read8(r); ver {
+               case 0:
+                       *p = nil
+               case 2:
+                       n := read16(r)
+                       *p = make(map[[3]int16]*NodeMeta, n)
+                       for ; n > 0; n-- {
+                               var pos [3]int16
+                               for i := range pos {
+                                       pos[i] = int16(read16(r))
+                               }
+                               nm := new(NodeMeta)
+                               chk(deserialize(r, nm))
+                               (*p)[pos] = nm
+                       }
+               default:
+                       chk(fmt.Errorf("unsupported nodemetas version: %d", ver))
+               }
+
+               chk(r.Close())
+       }
+
+PointedThing   {
+               var err error
+               *p, err = readPointedThing(r)
+               chk(err)
+       }
+
+[]AOMsg        { // For AOInitData.Msgs.
+               *p = make([]AOMsg, read8(r))
+               for i := range *p {
+                       r := &io.LimitedReader{r, int64(read32(r))}
+                       msg, err := readAOMsg(r)
+                       chk(err)
+                       (*p)[i] = msg
+                       if r.N > 0 {
+                               chk(fmt.Errorf("%d bytes of trailing data", r.N))
+                       }
+               }
+       }
+
+[]NodeDef      { // For ToCltNodeDefs.Defs.
+               *p = make([]NodeDef, read16(r))
+               r := &io.LimitedReader{r, int64(read32(r))}
+               for i := range *p {
+                       (*p)[i].deserialize(r)
+               }
+               if r.N > 0 {
+                       chk(fmt.Errorf("%d bytes of trailing data", r.N))
+               }
+       }
diff --git a/dir.go b/dir.go
new file mode 100644 (file)
index 0000000..693db98
--- /dev/null
+++ b/dir.go
@@ -0,0 +1,23 @@
+package mt
+
+// A Dir represents a direction parallel to an axis.
+type Dir uint8
+
+const (
+       East  Dir = iota // +X
+       Above            // +Y
+       North            // +Z
+       South            // -Z
+       Below            // -Y
+       West             // -X
+       NoDir
+)
+
+// Opposite returns the Dir's opposite.
+// NoDir is its own opposite.
+func (d Dir) Opposite() Dir {
+       if d >= NoDir {
+               return NoDir
+       }
+       return 5 - d
+}
diff --git a/internal/mkserialize/.gitignore b/internal/mkserialize/.gitignore
new file mode 100644 (file)
index 0000000..4dfd263
--- /dev/null
@@ -0,0 +1 @@
+mkserialize
diff --git a/internal/mkserialize/go.mod b/internal/mkserialize/go.mod
new file mode 100644 (file)
index 0000000..d845806
--- /dev/null
@@ -0,0 +1,5 @@
+module mkserialize
+
+go 1.16
+
+require golang.org/x/tools v0.1.3
diff --git a/internal/mkserialize/go.sum b/internal/mkserialize/go.sum
new file mode 100644 (file)
index 0000000..e652f3e
--- /dev/null
@@ -0,0 +1,27 @@
+github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.1.3 h1:L69ShwSZEyCsLKoAxDKeMvLDZkumEe8gXUZAjab0tX8=
+golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
diff --git a/internal/mkserialize/mkserialize.go b/internal/mkserialize/mkserialize.go
new file mode 100644 (file)
index 0000000..9b4b019
--- /dev/null
@@ -0,0 +1,611 @@
+package main
+
+import (
+       "bufio"
+       "flag"
+       "fmt"
+       "go/ast"
+       "go/printer"
+       "go/token"
+       "go/types"
+       "io"
+       "log"
+       "os"
+       "strconv"
+       "strings"
+
+       "golang.org/x/tools/go/ast/astutil"
+       "golang.org/x/tools/go/packages"
+)
+
+var (
+       pkg *packages.Package
+
+       serializeFmt   = make(map[string]string)
+       deserializeFmt = make(map[string]string)
+
+       uint8T = types.Universe.Lookup("uint8").Type()
+       byteT  = types.Universe.Lookup("byte").Type()
+
+       serialize   []*types.Named
+       inSerialize = make(map[string]bool)
+
+       consts = make(map[*ast.StructType][]*ast.Comment)
+)
+
+func structPragma(c *ast.Comment, sp *[]func(), expr string, de bool) {
+       fields := strings.SplitN(strings.TrimPrefix(c.Text, "//mt:"), " ", 2)
+       arg := ""
+       if len(fields) == 2 {
+               arg = fields[1]
+       }
+       switch fields[0] {
+       case "const":
+               tv, err := types.Eval(pkg.Fset, pkg.Types, c.Slash, arg)
+               if err != nil {
+                       error(c.Pos(), err)
+               }
+
+               if de {
+                       fmt.Println("{")
+                       x := newVar()
+                       fmt.Println("var", x, typeStr(tv.Type))
+                       genSerialize(tv.Type, x, token.NoPos, nil, de)
+                       fmt.Println("if", x, "!=", "(", tv.Value, ")",
+                               `{ chk(fmt.Errorf("const %v: %v",`, tv.Value, ",", x, ")) }")
+                       fmt.Println("}")
+               } else {
+                       v := newVar()
+                       fmt.Println("{", v, ":=", arg)
+                       genSerialize(tv.Type, v, c.Slash+token.Pos(len("//mt:const ")), nil, de)
+                       fmt.Println("}")
+               }
+       case "assert":
+               fmt.Printf("if !("+arg+") {", expr)
+               fmt.Printf("chk(errors.New(%q))\n", "assertion failed: "+arg)
+               fmt.Println("}")
+       case "zlib":
+               if de {
+                       fmt.Println("{ r, err := zlib.NewReader(byteReader{r}); chk(err)")
+                       *sp = append(*sp, func() {
+                               fmt.Println("chk(r.Close()) }")
+                       })
+               } else {
+                       fmt.Println("{ w := zlib.NewWriter(w)")
+                       *sp = append(*sp, func() {
+                               fmt.Println("chk(w.Close()) }")
+                       })
+               }
+       case "lenhdr":
+               if arg != "8" && arg != "16" && arg != "32" {
+                       error(c.Pos(), "usage: //mt:lenhdr (8|16|32)")
+               }
+
+               fmt.Println("{")
+
+               if !de {
+                       fmt.Println("ow := w")
+                       fmt.Println("w := new(bytes.Buffer)")
+               }
+
+               var cg ast.CommentGroup
+               if de {
+                       t := types.Universe.Lookup("uint" + arg).Type()
+                       fmt.Println("var n", t)
+                       genSerialize(t, "n", token.NoPos, nil, de)
+                       if arg == "64" {
+                               fmt.Println(`if n > math.MaxInt64 { panic("too big len") }`)
+                       }
+                       fmt.Println("r := &io.LimitedReader{r, int64(n)}")
+               } else {
+                       switch arg {
+                       case "8", "32":
+                               cg.List = []*ast.Comment{{Text: "//mt:len" + arg}}
+                       case "16":
+                       }
+               }
+
+               *sp = append(*sp, func() {
+                       if de {
+                               fmt.Println("if r.N > 0",
+                                       `{ chk(fmt.Errorf("%d bytes of trailing data", r.N)) }`)
+                       } else {
+                               fmt.Println("{")
+                               fmt.Println("buf := w")
+                               fmt.Println("w := ow")
+                               byteSlice := types.NewSlice(types.Typ[types.Byte])
+                               genSerialize(byteSlice, "buf.Bytes()", token.NoPos, &cg, de)
+                               fmt.Println("}")
+                       }
+
+                       fmt.Println("}")
+               })
+       case "end":
+               (*sp)[len(*sp)-1]()
+               *sp = (*sp)[:len(*sp)-1]
+       case "if":
+               fmt.Printf(strings.TrimPrefix(c.Text, "//mt:")+" {\n", expr)
+               *sp = append(*sp, func() {
+                       fmt.Println("}")
+               })
+       case "ifde":
+               if !de {
+                       fmt.Println("/*")
+               }
+       }
+}
+
+func genSerialize(t types.Type, expr string, pos token.Pos, doc *ast.CommentGroup, de bool) {
+       var lenhdr types.Type = types.Typ[types.Uint16]
+
+       useMethod := true
+       if doc != nil {
+               for _, c := range doc.List {
+                       pragma := true
+                       switch c.Text {
+                       case "//mt:utf16":
+                               t = types.NewSlice(types.Typ[types.Uint16])
+                               if de {
+                                       v := newVar()
+                                       fmt.Println("var", v, typeStr(t))
+                                       defer fmt.Println(expr + " = string(utf16.Decode(" + v + "))")
+                                       expr = v
+                               } else {
+                                       expr = "utf16.Encode([]rune(" + expr + "))"
+                               }
+                               pos = token.NoPos
+                       case "//mt:raw":
+                               lenhdr = nil
+                       case "//mt:len8":
+                               lenhdr = types.Typ[types.Uint8]
+                       case "//mt:len32":
+                               lenhdr = types.Typ[types.Uint32]
+                       case "//mt:opt":
+                               fmt.Println("if err := pcall(func() {")
+                               defer fmt.Println("}); err != nil && err != io.EOF",
+                                       "{ chk(err) }")
+                       default:
+                               pragma = false
+                       }
+                       if pragma {
+                               useMethod = false
+                       }
+               }
+       }
+
+       str := types.TypeString(t, types.RelativeTo(pkg.Types))
+       if de {
+               if or, ok := deserializeFmt[str]; ok {
+                       fmt.Println("{")
+                       fmt.Println("p := &" + expr)
+                       fmt.Print(or)
+                       fmt.Println("}")
+                       return
+               }
+       } else {
+               if or, ok := serializeFmt[str]; ok {
+                       fmt.Println("{")
+                       fmt.Println("x := " + expr)
+                       fmt.Print(or)
+                       fmt.Println("}")
+                       return
+               }
+       }
+
+       expr = "(" + expr + ")"
+
+       switch t := t.(type) {
+       case *types.Named:
+               if !useMethod {
+                       t := t.Underlying()
+                       genSerialize(t, "*(*"+typeStr(t)+")("+"&"+expr+")", pos, doc, de)
+                       return
+               }
+
+               method := "Serialize"
+               if de {
+                       method = "Deserialize"
+               }
+               for i := 0; i < t.NumMethods(); i++ {
+                       m := t.Method(i)
+                       if m.Name() == method {
+                               rw := "w"
+                               if de {
+                                       rw = "r"
+                               }
+                               fmt.Println("chk(" + expr + "." + method + "(" + rw + "))")
+                               return
+                       }
+               }
+
+               mkSerialize(t)
+
+               fmt.Println("if err := pcall(func() {")
+               if de {
+                       fmt.Println(expr + ".deserialize(r)")
+               } else {
+                       fmt.Println(expr + ".serialize(w)")
+               }
+               fmt.Println("}); err != nil",
+                       `{`,
+                       `if err == io.EOF { chk(io.EOF) };`,
+                       `chk(fmt.Errorf("%s: %w", `+strconv.Quote(t.String())+`, err))`,
+                       `}`)
+       case *types.Struct:
+               st := pos2node(pos)[0].(*ast.StructType)
+
+               a := consts[st]
+               b := st.Fields.List
+
+               // Merge sorted slices.
+               c := make([]ast.Node, 0, len(a)+len(b))
+               for i, j := 0, 0; i < len(a) || j < len(b); {
+                       if i < len(a) && (j >= len(b) || a[i].Pos() < b[j].Pos()) {
+                               c = append(c, a[i])
+                               i++
+                       } else {
+                               c = append(c, b[j])
+                               j++
+                       }
+               }
+
+               var (
+                       stk []func()
+                       i   int
+               )
+               for _, field := range c {
+                       switch field := field.(type) {
+                       case *ast.Comment:
+                               structPragma(field, &stk, expr, de)
+                       case *ast.Field:
+                               n := len(field.Names)
+                               if n == 0 {
+                                       n = 1
+                               }
+                               for ; n > 0; n-- {
+                                       f := t.Field(i)
+                                       genSerialize(f.Type(), expr+"."+f.Name(), field.Type.Pos(), field.Doc, de)
+                                       i++
+                               }
+                       }
+               }
+
+               if len(stk) > 0 {
+                       error(pos, "missing //mt:end")
+               }
+       case *types.Basic:
+               switch t.Kind() {
+               case types.String:
+                       byteSlice := types.NewSlice(types.Typ[types.Byte])
+                       if de {
+                               v := newVar()
+                               fmt.Println("var", v, byteSlice)
+                               genSerialize(byteSlice, v, token.NoPos, doc, de)
+                               fmt.Println(expr, "=", "string(", v, ")")
+                       } else {
+                               genSerialize(byteSlice, "[]byte"+expr, token.NoPos, doc, de)
+                       }
+               default:
+                       error(pos, "can't serialize ", t)
+               }
+       case *types.Slice:
+               if de {
+                       if lenhdr != nil {
+                               v := newVar()
+                               fmt.Println("var", v, lenhdr)
+                               genSerialize(lenhdr, v, pos, nil, de)
+                               fmt.Printf("%s = make(%v, %s)\n",
+                                       expr, typeStr(t), v)
+                               genSerialize(types.NewArray(t.Elem(), 0), expr, pos, nil, de)
+                       } else {
+                               fmt.Println("for {")
+                               v := newVar()
+                               fmt.Println("var", v, typeStr(t.Elem()))
+                               fmt.Println("err := pcall(func() {")
+                               if pos.IsValid() {
+                                       pos = pos2node(pos)[0].(*ast.ArrayType).Elt.Pos()
+                               }
+                               genSerialize(t.Elem(), v, pos, nil, de)
+                               fmt.Println("})")
+                               fmt.Println("if err == io.EOF { break }")
+                               fmt.Println(expr + " = append(" + expr + ", " + v + ")")
+                               fmt.Println("chk(err)")
+                               fmt.Println("}")
+                       }
+               } else {
+                       if lenhdr != nil {
+                               fmt.Println("if len("+expr+") >",
+                                       "math.Max"+strings.Title(lenhdr.String()),
+                                       "{ chk(ErrTooLong) }")
+                               genSerialize(lenhdr, lenhdr.String()+"(len("+expr+"))", pos, nil, de)
+                       }
+                       genSerialize(types.NewArray(t.Elem(), 0), expr, pos, nil, de)
+               }
+       case *types.Array:
+               et := t.Elem()
+               if et == byteT || et == uint8T {
+                       if de {
+                               fmt.Println("{",
+                                       "_, err := io.ReadFull(r, "+expr+"[:]);",
+                                       "chk(err)",
+                                       "}")
+                       } else {
+                               fmt.Println("{",
+                                       "_, err := w.Write("+expr+"[:]);",
+                                       "chk(err)",
+                                       "}")
+                       }
+                       break
+               }
+               i := newVar()
+               fmt.Println("for", i, ":= range", expr, "{")
+               if pos.IsValid() {
+                       pos = pos2node(pos)[0].(*ast.ArrayType).Elt.Pos()
+               }
+               genSerialize(et, expr+"["+i+"]", pos, nil, de)
+               fmt.Println("}")
+       default:
+               error(pos, "can't serialize ", t)
+       }
+}
+
+func readOverrides(path string, override map[string]string) {
+       f, err := os.Open(path)
+       if err != nil {
+               log.Fatal(err)
+       }
+       defer f.Close()
+
+       b := bufio.NewReader(f)
+       line := 0
+       col1 := ""
+       for {
+               ln, err := b.ReadString('\n')
+               if err != nil {
+                       if err == io.EOF {
+                               if len(ln) > 0 {
+                                       log.Fatal("no newline at end of ", f.Name())
+                               }
+                               return
+                       }
+                       log.Fatal(err)
+               }
+               line++
+
+               if ln == "\n" {
+                       continue
+               }
+
+               fields := strings.SplitN(ln, "\t", 2)
+               if len(fields) == 1 {
+                       log.Fatal(f.Name(), ":", line, ": missing tab")
+               }
+               if fields[0] != "" {
+                       col1 = fields[0]
+               }
+
+               if col1 == "" {
+                       fmt.Print(fields[1])
+                       continue
+               }
+
+               override[col1] += fields[1]
+       }
+}
+
+func mkSerialize(t *types.Named) {
+       if !inSerialize[t.String()] {
+               serialize = append(serialize, t)
+               inSerialize[t.String()] = true
+       }
+}
+
+var varNo int
+
+func newVar() string {
+       varNo++
+       return fmt.Sprint("local", varNo)
+}
+
+func pos2node(pos token.Pos) []ast.Node {
+       return interval2node(pos, pos)
+}
+
+func interval2node(start, end token.Pos) []ast.Node {
+       for _, f := range pkg.Syntax {
+               if f.Pos() <= start && end <= f.End() {
+                       if path, _ := astutil.PathEnclosingInterval(f, start, end); path != nil {
+                               return path
+                       }
+               }
+       }
+       return nil
+}
+
+func error(pos token.Pos, a ...interface{}) {
+       if !pos.IsValid() {
+               log.Fatal(a...)
+       }
+       log.Fatal(append([]interface{}{pkg.Fset.Position(pos), ": "}, a...)...)
+}
+
+func typeStr(t types.Type) string {
+       return types.TypeString(t, func(p *types.Package) string {
+               if p == pkg.Types {
+                       return ""
+               }
+
+               return p.Name()
+       })
+}
+
+var typeNames = []string{
+       "ToSrvNil",
+       "ToSrvInit",
+       "ToSrvInit2",
+       "ToSrvModChanJoin",
+       "ToSrvModChanLeave",
+       "ToSrvModChanMsg",
+       "ToSrvPlayerPos",
+       "ToSrvGotBlks",
+       "ToSrvDeletedBlks",
+       "ToSrvInvAction",
+       "ToSrvChatMsg",
+       "ToSrvFallDmg",
+       "ToSrvSelectItem",
+       "ToSrvRespawn",
+       "ToSrvInteract",
+       "ToSrvRemovedSounds",
+       "ToSrvNodeMetaFields",
+       "ToSrvInvFields",
+       "ToSrvReqMedia",
+       "ToSrvCltReady",
+       "ToSrvFirstSRP",
+       "ToSrvSRPBytesA",
+       "ToSrvSRPBytesM",
+
+       "ToCltHello",
+       "ToCltAcceptAuth",
+       "ToCltAcceptSudoMode",
+       "ToCltDenySudoMode",
+       "ToCltDisco",
+       "ToCltBlkData",
+       "ToCltAddNode",
+       "ToCltRemoveNode",
+       "ToCltInv",
+       "ToCltTimeOfDay",
+       "ToCltCSMRestrictionFlags",
+       "ToCltAddPlayerVel",
+       "ToCltMediaPush",
+       "ToCltChatMsg",
+       "ToCltAORmAdd",
+       "ToCltAOMsgs",
+       "ToCltHP",
+       "ToCltMovePlayer",
+       "ToCltDiscoLegacy",
+       "ToCltFOV",
+       "ToCltDeathScreen",
+       "ToCltMedia",
+       "ToCltNodeDefs",
+       "ToCltAnnounceMedia",
+       "ToCltItemDefs",
+       "ToCltPlaySound",
+       "ToCltStopSound",
+       "ToCltPrivs",
+       "ToCltInvFormspec",
+       "ToCltDetachedInv",
+       "ToCltShowFormspec",
+       "ToCltMovement",
+       "ToCltSpawnParticle",
+       "ToCltAddParticleSpawner",
+       "ToCltAddHUD",
+       "ToCltRmHUD",
+       "ToCltChangeHUD",
+       "ToCltHUDFlags",
+       "ToCltSetHotbarParam",
+       "ToCltBreath",
+       "ToCltSkyParams",
+       "ToCltOverrideDayNightRatio",
+       "ToCltLocalPlayerAnim",
+       "ToCltEyeOffset",
+       "ToCltDelParticleSpawner",
+       "ToCltCloudParams",
+       "ToCltFadeSound",
+       "ToCltUpdatePlayerList",
+       "ToCltModChanMsg",
+       "ToCltModChanSig",
+       "ToCltNodeMetasChanged",
+       "ToCltSunParams",
+       "ToCltMoonParams",
+       "ToCltStarParams",
+       "ToCltSRPBytesSaltB",
+       "ToCltFormspecPrepend",
+
+       "AOCmdProps",
+       "AOCmdPos",
+       "AOCmdTextureMod",
+       "AOCmdSprite",
+       "AOCmdHP",
+       "AOCmdArmorGroups",
+       "AOCmdAnim",
+       "AOCmdBonePos",
+       "AOCmdAttach",
+       "AOCmdPhysOverride",
+       "AOCmdSpawnInfant",
+       "AOCmdAnimSpeed",
+
+       "NodeMeta",
+       "MinimapMode",
+       "NodeDef",
+       "PointedNode",
+       "PointedAO",
+}
+
+func main() {
+       log.SetFlags(0)
+       log.SetPrefix("mkserialize: ")
+
+       flag.Parse()
+
+       cfg := &packages.Config{Mode: packages.NeedSyntax |
+               packages.NeedName |
+               packages.NeedDeps |
+               packages.NeedImports |
+               packages.NeedTypes |
+               packages.NeedTypesInfo}
+       pkgs, err := packages.Load(cfg, flag.Args()...)
+       if err != nil {
+               log.Fatal(err)
+       }
+       if packages.PrintErrors(pkgs) > 0 {
+               os.Exit(1)
+       }
+
+       if len(pkgs) != 1 {
+               log.Fatal("must be exactly 1 package")
+       }
+       pkg = pkgs[0]
+
+       fmt.Println("package", pkg.Name)
+
+       readOverrides("serialize.fmt", serializeFmt)
+       readOverrides("deserialize.fmt", deserializeFmt)
+
+       for _, f := range pkg.Syntax {
+               for _, cg := range f.Comments {
+                       for _, c := range cg.List {
+                               if !strings.HasPrefix(c.Text, "//mt:") {
+                                       continue
+                               }
+                               st := interval2node(c.Pos(), c.End())[1].(*ast.StructType)
+                               consts[st] = append(consts[st], c)
+                       }
+               }
+       }
+
+       for _, name := range typeNames {
+               obj := pkg.Types.Scope().Lookup(name)
+               if obj == nil {
+                       log.Println("undeclared identifier: ", name)
+                       continue
+               }
+               mkSerialize(obj.Type().(*types.Named))
+       }
+
+       for i := 0; i < len(serialize); i++ {
+               for _, de := range []bool{false, true} {
+                       t := serialize[i]
+                       sig := "serialize(w io.Writer)"
+                       if de {
+                               sig = "deserialize(r io.Reader)"
+                       }
+                       fmt.Println("\nfunc (obj *" + t.Obj().Name() + ") " + sig + " {")
+                       pos := t.Obj().Pos()
+                       tExpr := pos2node(pos)[1].(*ast.TypeSpec).Type
+                       var b strings.Builder
+                       printer.Fprint(&b, pkg.Fset, tExpr)
+                       genSerialize(pkg.TypesInfo.Types[tExpr].Type, "*(*("+b.String()+"))(obj)", tExpr.Pos(), nil, de)
+                       fmt.Println("}")
+               }
+       }
+}
diff --git a/itemdef.go b/itemdef.go
new file mode 100644 (file)
index 0000000..a761b65
--- /dev/null
@@ -0,0 +1,56 @@
+package mt
+
+import "image/color"
+
+type ItemType uint8
+
+const (
+       _ ItemType = iota
+       NodeItem
+       CraftItem
+       ToolItem
+)
+
+// An ItemDef defines the properties of an item.
+type ItemDef struct {
+       //mt:lenhdr 16
+
+       // Version.
+       //mt:const uint8(6)
+
+       Type ItemType
+
+       Name, Desc string
+
+       InvImg, WieldImg Texture
+       WieldScale       [3]float32
+
+       StackMax uint16
+
+       Usable          bool
+       CanPointLiquids bool
+
+       ToolCaps ToolCaps
+
+       Groups []Group
+
+       PlacePredict string
+
+       PlaceSnd, PlaceFailSnd SoundDef
+
+       PointRange float32
+
+       // Set index in Palette with "palette_index" item meta field,
+       // this overrides Color.
+       Palette Texture
+       Color   color.NRGBA
+
+       // Texture overlays.
+       InvOverlay, WieldOverlay Texture
+
+       ShortDesc string
+
+       PlaceParam2 byte
+
+       //mt:end
+}
diff --git a/light.go b/light.go
new file mode 100644 (file)
index 0000000..b086591
--- /dev/null
+++ b/light.go
@@ -0,0 +1,13 @@
+package mt
+
+const (
+       MaxLight = 14 // Maximum artificial light.
+       SunLight = 15
+)
+
+type LightBank uint8
+
+const (
+       Day LightBank = iota
+       Night
+)
diff --git a/mapblk.go b/mapblk.go
new file mode 100644 (file)
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
+}
diff --git a/minimap.go b/minimap.go
new file mode 100644 (file)
index 0000000..f0817f7
--- /dev/null
@@ -0,0 +1,29 @@
+package mt
+
+type MinimapType uint16
+
+const (
+       NoMinimap MinimapType = iota
+       SurfaceMinimap
+       RadarMinimap
+       TextureMinimap
+)
+
+type MinimapMode struct {
+       Type  MinimapType
+       Label string
+       Size  uint16
+       Texture
+       Scale uint16
+}
+
+// DefaultMinimap is the initial set of MinimapModes used by the client.
+var DefaultMinimap = []MinimapMode{
+       {Type: NoMinimap},
+       {Type: SurfaceMinimap, Size: 256},
+       {Type: SurfaceMinimap, Size: 128},
+       {Type: SurfaceMinimap, Size: 64},
+       {Type: RadarMinimap, Size: 512},
+       {Type: RadarMinimap, Size: 256},
+       {Type: RadarMinimap, Size: 128},
+}
diff --git a/mkpktinfos.sh b/mkpktinfos.sh
new file mode 100755 (executable)
index 0000000..3d5d5e7
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+(
+       echo // Code generated by mkpktinfos.sh. DO NOT EDIT.
+       echo
+       echo package mt
+       echo
+       awk '{
+               print "func (*"$1") DefaultPktInfo() rudp.PktInfo { return rudp.PktInfo{"$2", "($3 == "unrel" ? "true" : "false")"} }"
+       }' pktinfos
+) | goimports >pktinfos.go
diff --git a/mkserialize.sh b/mkserialize.sh
new file mode 100755 (executable)
index 0000000..c758a85
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+rm -f serialize.go
+
+(
+       echo // Code generated by mkserialize.sh. DO NOT EDIT.
+       echo
+       internal/mkserialize/mkserialize | goimports
+) >>serialize.go.tmp &&
+mv serialize.go.tmp serialize.go ||
+rm serialize.go.tmp
diff --git a/mt.go b/mt.go
index c5d665de1e3dd57353388612266b5055ed209dcb..e7ca84a2d97080e7c78cc4567ea3d1a8bb001966 100644 (file)
--- a/mt.go
+++ b/mt.go
@@ -1,5 +1,29 @@
+// Package mt implements the high-level Minetest protocol.
+// This version is compatible with
+// https://github.com/ClamityAnarchy/minetest/commit/66adeade9d5c45a5499b5ad1ad4bd91dae82482a.
 package mt
 
+type Node struct {
+       Param0         Content
+       Param1, Param2 uint8
+}
+
+type Content uint16
+
+const (
+       Unknown Content = 125
+       Air     Content = 126
+       Ignore  Content = 127
+)
+
+type Group struct {
+       Name   string
+       Rating int16
+}
+
 type Field struct {
-       Name, Value string
+       Name string
+
+       //mt:len32
+       Value string
 }
diff --git a/nodebox.go b/nodebox.go
new file mode 100644 (file)
index 0000000..46d704c
--- /dev/null
@@ -0,0 +1,39 @@
+package mt
+
+type Box [2]Vec
+
+type NodeBoxType uint8
+
+const (
+       CubeBox NodeBoxType = iota
+       FixedBox
+       MountedBox
+       LeveledBox
+       ConnectedBox
+       maxBox
+)
+
+type DirBoxes struct {
+       Top, Bot                 []Box
+       Front, Left, Back, Right []Box
+}
+
+type NodeBox struct {
+       //mt:const uint8(6)
+
+       Type NodeBoxType
+       //mt:assert %s.Type < maxBox
+
+       //mt:if %s.Type == MountedBox
+       WallTop, WallBot, WallSides Box
+       //mt:end
+
+       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+       Fixed []Box
+       //mt:end
+
+       //mt:if %s.Type == ConnectedBox
+       ConnDirs, DiscoDirs  DirBoxes
+       DiscoAll, DiscoSides []Box
+       //mt:end
+}
diff --git a/nodedef.go b/nodedef.go
new file mode 100644 (file)
index 0000000..5606452
--- /dev/null
@@ -0,0 +1,148 @@
+package mt
+
+import "image/color"
+
+type Param1Type uint8
+
+const (
+       P1Nothing Param1Type = iota
+       P1Light
+)
+
+type Param2Type uint8
+
+const (
+       P2Nibble Param2Type = iota
+       P2Byte
+       P2Flowing
+       P2FaceDir
+       P2Mounted
+       P2Leveled
+       P2Rotation
+       P2Mesh
+       P2Color
+       P2ColorFaceDir
+       P2ColorMounted
+       P2GlassLikeLevel
+)
+
+// A DrawType specifies how a node is drawn.
+type DrawType uint8
+
+const (
+       DrawCube DrawType = iota
+       DrawNothing
+       DrawLiquid
+       DrawFlowing
+       DrawLikeGlass
+       DrawAllFaces
+       DrawAllFacesOpt
+       DrawTorch
+       DrawSign
+       DrawPlant
+       DrawFence
+       DrawRail
+       DrawNodeBox
+       DrawGlassFrame
+       DrawFire
+       DrawGlassFrameOpt
+       DrawMesh
+       DrawRootedPlant
+)
+
+type WaveType uint8
+
+const (
+       NotWaving    WaveType = iota
+       PlantWaving           // Only top waves from side to side.
+       LeafWaving            // Wave side to side.
+       LiquidWaving          // Wave up and down.
+)
+
+type LiquidType uint8
+
+const (
+       NotALiquid LiquidType = iota
+       FlowingLiquid
+       LiquidSrc
+)
+
+// AlphaUse specifies how the alpha channel of a texture is used.
+type AlphaUse uint8
+
+const (
+       Blend AlphaUse = iota
+       Mask           // "Rounded" to either fully opaque or transparent.
+       Opaque
+       Legacy
+)
+
+type NodeDef struct {
+       Param0 Content
+
+       //mt:lenhdr 16
+
+       //mt:const uint8(13)
+
+       Name   string
+       Groups []Group
+
+       P1Type   Param1Type
+       P2Type   Param2Type
+       DrawType DrawType
+
+       Mesh  string
+       Scale float32
+       //mt:const uint8(6)
+       Tiles        [6]TileDef
+       OverlayTiles [6]TileDef
+       //mt:const uint8(6)
+       SpecialTiles [6]TileDef
+
+       Color   color.NRGBA
+       Palette Texture
+
+       Waving       WaveType
+       ConnectSides uint8
+       ConnectTo    []Content
+       InsideTint   color.NRGBA
+       Level        uint8 // Must be < 128.
+
+       Translucent bool // Sunlight is scattered and becomes normal light.
+       Transparent bool // Sunlight isn't scattered.
+       LightSrc    uint8
+
+       GndContent   bool
+       Collides     bool
+       Pointable    bool
+       Diggable     bool
+       Climbable    bool
+       Replaceable  bool
+       OnRightClick bool
+
+       DmgPerSec int32
+
+       LiquidType   LiquidType
+       FlowingAlt   string
+       SrcAlt       string
+       Viscosity    uint8 // 0-7
+       LiqRenewable bool
+       FlowRange    uint8
+       DrownDmg     uint8
+       Floodable    bool
+
+       DrawBox, ColBox, SelBox NodeBox
+
+       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+       LegacyFaceDir bool
+       LegacyMounted bool
+
+       DigPredict string
+
+       MaxLvl uint8
+
+       AlphaUse
+
+       //mt:end
+}
diff --git a/nodemeta.go b/nodemeta.go
new file mode 100644 (file)
index 0000000..b91abbf
--- /dev/null
@@ -0,0 +1,27 @@
+package mt
+
+type NodeMeta struct {
+       //mt:len32
+       Fields []NodeMetaField
+
+       Inv Inv
+}
+
+type NodeMetaField struct {
+       Field
+       Private bool
+}
+
+func (nm *NodeMeta) Field(name string) *NodeMetaField {
+       if nm == nil {
+               return nil
+       }
+
+       for i, f := range nm.Fields {
+               if f.Name == name {
+                       return &nm.Fields[i]
+               }
+       }
+
+       return nil
+}
diff --git a/pktinfos b/pktinfos
new file mode 100644 (file)
index 0000000..e6316f2
--- /dev/null
+++ b/pktinfos
@@ -0,0 +1,80 @@
+ToCltHello     0       rel
+ToCltAcceptAuth        0       rel
+ToCltAcceptSudoMode    0       rel
+ToCltDenySudoMode      0       rel
+ToCltDisco     0       rel
+ToCltBlkData   2       rel
+ToCltAddNode   0       rel
+ToCltRemoveNode        0       rel
+ToCltInv       0       rel
+ToCltTimeOfDay 0       rel
+ToCltCSMRestrictionFlags       0       rel
+ToCltAddPlayerVel      0       rel
+ToCltMediaPush 0       rel
+ToCltChatMsg   0       rel
+ToCltAORmAdd   0       rel
+ToCltAOMsgs    0       rel
+ToCltHP        0       rel
+ToCltMovePlayer        0       rel
+ToCltDiscoLegacy       0       rel
+ToCltFOV       0       rel
+ToCltDeathScreen       0       rel
+ToCltMedia     2       rel
+ToCltNodeDefs  0       rel
+ToCltAnnounceMedia     0       rel
+ToCltItemDefs  0       rel
+ToCltPlaySound 0       rel
+ToCltStopSound 0       rel
+ToCltPrivs     0       rel
+ToCltInvFormspec       0       rel
+ToCltDetachedInv       0       rel
+ToCltShowFormspec      0       rel
+ToCltMovement  0       rel
+ToCltSpawnParticle     0       rel
+ToCltAddParticleSpawner        0       rel
+ToCltAddHUD    1       rel
+ToCltRmHUD     1       rel
+ToCltChangeHUD 1       rel
+ToCltHUDFlags  1       rel
+ToCltSetHotbarParam    1       rel
+ToCltBreath    0       rel
+ToCltSkyParams 0       rel
+ToCltOverrideDayNightRatio     0       rel
+ToCltLocalPlayerAnim   0       rel
+ToCltEyeOffset 0       rel
+ToCltDelParticleSpawner        0       rel
+ToCltCloudParams       0       rel
+ToCltFadeSound 0       rel
+ToCltUpdatePlayerList  0       rel
+ToCltModChanMsg        0       rel
+ToCltModChanSig        0       rel
+ToCltNodeMetasChanged  0       rel
+ToCltSunParams 0       rel
+ToCltMoonParams        0       rel
+ToCltStarParams        0       rel
+ToCltSRPBytesSaltB     0       rel
+ToCltFormspecPrepend   0       rel
+ToCltMinimapModes      0       rel
+ToSrvNil       0       rel
+ToSrvInit      1       unrel
+ToSrvInit2     1       rel
+ToSrvModChanJoin       0       rel
+ToSrvModChanLeave      0       rel
+ToSrvModChanMsg        0       rel
+ToSrvPlayerPos 0       unrel
+ToSrvGotBlks   2       rel
+ToSrvDeletedBlks       2       rel
+ToSrvInvAction 0       rel
+ToSrvChatMsg   0       rel
+ToSrvFallDmg   0       rel
+ToSrvSelectItem        0       rel
+ToSrvRespawn   0       rel
+ToSrvInteract  0       rel
+ToSrvRemovedSounds     2       rel
+ToSrvNodeMetaFields    0       rel
+ToSrvInvFields 0       rel
+ToSrvReqMedia  1       rel
+ToSrvCltReady  1       rel
+ToSrvFirstSRP  1       rel
+ToSrvSRPBytesA 1       rel
+ToSrvSRPBytesM 1       rel
diff --git a/pktinfos.go b/pktinfos.go
new file mode 100644 (file)
index 0000000..4b725da
--- /dev/null
@@ -0,0 +1,86 @@
+// Code generated by mkpktinfos.sh. DO NOT EDIT.
+
+package mt
+
+import "github.com/anon55555/mt/rudp"
+
+func (*ToCltHello) DefaultPktInfo() rudp.PktInfo                 { return rudp.PktInfo{0, false} }
+func (*ToCltAcceptAuth) DefaultPktInfo() rudp.PktInfo            { return rudp.PktInfo{0, false} }
+func (*ToCltAcceptSudoMode) DefaultPktInfo() rudp.PktInfo        { return rudp.PktInfo{0, false} }
+func (*ToCltDenySudoMode) DefaultPktInfo() rudp.PktInfo          { return rudp.PktInfo{0, false} }
+func (*ToCltDisco) DefaultPktInfo() rudp.PktInfo                 { return rudp.PktInfo{0, false} }
+func (*ToCltBlkData) DefaultPktInfo() rudp.PktInfo               { return rudp.PktInfo{2, false} }
+func (*ToCltAddNode) DefaultPktInfo() rudp.PktInfo               { return rudp.PktInfo{0, false} }
+func (*ToCltRemoveNode) DefaultPktInfo() rudp.PktInfo            { return rudp.PktInfo{0, false} }
+func (*ToCltInv) DefaultPktInfo() rudp.PktInfo                   { return rudp.PktInfo{0, false} }
+func (*ToCltTimeOfDay) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{0, false} }
+func (*ToCltCSMRestrictionFlags) DefaultPktInfo() rudp.PktInfo   { return rudp.PktInfo{0, false} }
+func (*ToCltAddPlayerVel) DefaultPktInfo() rudp.PktInfo          { return rudp.PktInfo{0, false} }
+func (*ToCltMediaPush) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{0, false} }
+func (*ToCltChatMsg) DefaultPktInfo() rudp.PktInfo               { return rudp.PktInfo{0, false} }
+func (*ToCltAORmAdd) DefaultPktInfo() rudp.PktInfo               { return rudp.PktInfo{0, false} }
+func (*ToCltAOMsgs) DefaultPktInfo() rudp.PktInfo                { return rudp.PktInfo{0, false} }
+func (*ToCltHP) DefaultPktInfo() rudp.PktInfo                    { return rudp.PktInfo{0, false} }
+func (*ToCltMovePlayer) DefaultPktInfo() rudp.PktInfo            { return rudp.PktInfo{0, false} }
+func (*ToCltDiscoLegacy) DefaultPktInfo() rudp.PktInfo           { return rudp.PktInfo{0, false} }
+func (*ToCltFOV) DefaultPktInfo() rudp.PktInfo                   { return rudp.PktInfo{0, false} }
+func (*ToCltDeathScreen) DefaultPktInfo() rudp.PktInfo           { return rudp.PktInfo{0, false} }
+func (*ToCltMedia) DefaultPktInfo() rudp.PktInfo                 { return rudp.PktInfo{2, false} }
+func (*ToCltNodeDefs) DefaultPktInfo() rudp.PktInfo              { return rudp.PktInfo{0, false} }
+func (*ToCltAnnounceMedia) DefaultPktInfo() rudp.PktInfo         { return rudp.PktInfo{0, false} }
+func (*ToCltItemDefs) DefaultPktInfo() rudp.PktInfo              { return rudp.PktInfo{0, false} }
+func (*ToCltPlaySound) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{0, false} }
+func (*ToCltStopSound) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{0, false} }
+func (*ToCltPrivs) DefaultPktInfo() rudp.PktInfo                 { return rudp.PktInfo{0, false} }
+func (*ToCltInvFormspec) DefaultPktInfo() rudp.PktInfo           { return rudp.PktInfo{0, false} }
+func (*ToCltDetachedInv) DefaultPktInfo() rudp.PktInfo           { return rudp.PktInfo{0, false} }
+func (*ToCltShowFormspec) DefaultPktInfo() rudp.PktInfo          { return rudp.PktInfo{0, false} }
+func (*ToCltMovement) DefaultPktInfo() rudp.PktInfo              { return rudp.PktInfo{0, false} }
+func (*ToCltSpawnParticle) DefaultPktInfo() rudp.PktInfo         { return rudp.PktInfo{0, false} }
+func (*ToCltAddParticleSpawner) DefaultPktInfo() rudp.PktInfo    { return rudp.PktInfo{0, false} }
+func (*ToCltAddHUD) DefaultPktInfo() rudp.PktInfo                { return rudp.PktInfo{1, false} }
+func (*ToCltRmHUD) DefaultPktInfo() rudp.PktInfo                 { return rudp.PktInfo{1, false} }
+func (*ToCltChangeHUD) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{1, false} }
+func (*ToCltHUDFlags) DefaultPktInfo() rudp.PktInfo              { return rudp.PktInfo{1, false} }
+func (*ToCltSetHotbarParam) DefaultPktInfo() rudp.PktInfo        { return rudp.PktInfo{1, false} }
+func (*ToCltBreath) DefaultPktInfo() rudp.PktInfo                { return rudp.PktInfo{0, false} }
+func (*ToCltSkyParams) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{0, false} }
+func (*ToCltOverrideDayNightRatio) DefaultPktInfo() rudp.PktInfo { return rudp.PktInfo{0, false} }
+func (*ToCltLocalPlayerAnim) DefaultPktInfo() rudp.PktInfo       { return rudp.PktInfo{0, false} }
+func (*ToCltEyeOffset) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{0, false} }
+func (*ToCltDelParticleSpawner) DefaultPktInfo() rudp.PktInfo    { return rudp.PktInfo{0, false} }
+func (*ToCltCloudParams) DefaultPktInfo() rudp.PktInfo           { return rudp.PktInfo{0, false} }
+func (*ToCltFadeSound) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{0, false} }
+func (*ToCltUpdatePlayerList) DefaultPktInfo() rudp.PktInfo      { return rudp.PktInfo{0, false} }
+func (*ToCltModChanMsg) DefaultPktInfo() rudp.PktInfo            { return rudp.PktInfo{0, false} }
+func (*ToCltModChanSig) DefaultPktInfo() rudp.PktInfo            { return rudp.PktInfo{0, false} }
+func (*ToCltNodeMetasChanged) DefaultPktInfo() rudp.PktInfo      { return rudp.PktInfo{0, false} }
+func (*ToCltSunParams) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{0, false} }
+func (*ToCltMoonParams) DefaultPktInfo() rudp.PktInfo            { return rudp.PktInfo{0, false} }
+func (*ToCltStarParams) DefaultPktInfo() rudp.PktInfo            { return rudp.PktInfo{0, false} }
+func (*ToCltSRPBytesSaltB) DefaultPktInfo() rudp.PktInfo         { return rudp.PktInfo{0, false} }
+func (*ToCltFormspecPrepend) DefaultPktInfo() rudp.PktInfo       { return rudp.PktInfo{0, false} }
+func (*ToCltMinimapModes) DefaultPktInfo() rudp.PktInfo          { return rudp.PktInfo{0, false} }
+func (*ToSrvNil) DefaultPktInfo() rudp.PktInfo                   { return rudp.PktInfo{0, false} }
+func (*ToSrvInit) DefaultPktInfo() rudp.PktInfo                  { return rudp.PktInfo{1, true} }
+func (*ToSrvInit2) DefaultPktInfo() rudp.PktInfo                 { return rudp.PktInfo{1, false} }
+func (*ToSrvModChanJoin) DefaultPktInfo() rudp.PktInfo           { return rudp.PktInfo{0, false} }
+func (*ToSrvModChanLeave) DefaultPktInfo() rudp.PktInfo          { return rudp.PktInfo{0, false} }
+func (*ToSrvModChanMsg) DefaultPktInfo() rudp.PktInfo            { return rudp.PktInfo{0, false} }
+func (*ToSrvPlayerPos) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{0, true} }
+func (*ToSrvGotBlks) DefaultPktInfo() rudp.PktInfo               { return rudp.PktInfo{2, false} }
+func (*ToSrvDeletedBlks) DefaultPktInfo() rudp.PktInfo           { return rudp.PktInfo{2, false} }
+func (*ToSrvInvAction) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{0, false} }
+func (*ToSrvChatMsg) DefaultPktInfo() rudp.PktInfo               { return rudp.PktInfo{0, false} }
+func (*ToSrvFallDmg) DefaultPktInfo() rudp.PktInfo               { return rudp.PktInfo{0, false} }
+func (*ToSrvSelectItem) DefaultPktInfo() rudp.PktInfo            { return rudp.PktInfo{0, false} }
+func (*ToSrvRespawn) DefaultPktInfo() rudp.PktInfo               { return rudp.PktInfo{0, false} }
+func (*ToSrvInteract) DefaultPktInfo() rudp.PktInfo              { return rudp.PktInfo{0, false} }
+func (*ToSrvRemovedSounds) DefaultPktInfo() rudp.PktInfo         { return rudp.PktInfo{2, false} }
+func (*ToSrvNodeMetaFields) DefaultPktInfo() rudp.PktInfo        { return rudp.PktInfo{0, false} }
+func (*ToSrvInvFields) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{0, false} }
+func (*ToSrvReqMedia) DefaultPktInfo() rudp.PktInfo              { return rudp.PktInfo{1, false} }
+func (*ToSrvCltReady) DefaultPktInfo() rudp.PktInfo              { return rudp.PktInfo{1, false} }
+func (*ToSrvFirstSRP) DefaultPktInfo() rudp.PktInfo              { return rudp.PktInfo{1, false} }
+func (*ToSrvSRPBytesA) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{1, false} }
+func (*ToSrvSRPBytesM) DefaultPktInfo() rudp.PktInfo             { return rudp.PktInfo{1, false} }
diff --git a/playerpos.go b/playerpos.go
new file mode 100644 (file)
index 0000000..946bbae
--- /dev/null
@@ -0,0 +1,74 @@
+package mt
+
+type Keys uint32
+
+const (
+       ForwardKey Keys = 1 << iota
+       BackwardKey
+       LeftKey
+       RightKey
+       JumpKey
+       SpecialKey
+       SneakKey
+       DigKey
+       PlaceKey
+       ZoomKey
+)
+
+type PlayerPos struct {
+       Pos100, Vel100   [3]int32
+       Pitch100, Yaw100 int32
+       Keys             Keys
+       FOV80            uint8
+       WantedRange      uint8 // in MapBlks.
+}
+
+func (p PlayerPos) Pos() (pos Pos) {
+       for i := range pos {
+               pos[i] = float32(p.Pos100[i]) / 100
+       }
+       return
+}
+
+func (p *PlayerPos) SetPos(pos Pos) {
+       for i, x := range pos {
+               p.Pos100[i] = int32(x * 100)
+       }
+}
+
+func (p PlayerPos) Vel() (vel Vec) {
+       for i := range vel {
+               vel[i] = float32(p.Vel100[i]) / 100
+       }
+       return
+}
+
+func (p *PlayerPos) SetVel(vel Vec) {
+       for i, x := range vel {
+               p.Vel100[i] = int32(x * 100)
+       }
+}
+
+func (p PlayerPos) Pitch() float32 {
+       return float32(p.Pitch100) / 100
+}
+
+func (p *PlayerPos) SetPitch(pitch float32) {
+       p.Pitch100 = int32(pitch * 100)
+}
+
+func (p PlayerPos) Yaw() float32 {
+       return float32(p.Yaw100) / 100
+}
+
+func (p *PlayerPos) SetYaw(yaw float32) {
+       p.Yaw100 = int32(yaw * 100)
+}
+
+func (p PlayerPos) FOV() float32 {
+       return float32(p.FOV80) / 80
+}
+
+func (p *PlayerPos) SetFOV(fov float32) {
+       p.FOV80 = uint8(fov * 80)
+}
diff --git a/pointedthing.go b/pointedthing.go
new file mode 100644 (file)
index 0000000..c73130f
--- /dev/null
@@ -0,0 +1,69 @@
+package mt
+
+import (
+       "fmt"
+       "io"
+)
+
+type PointedThing interface {
+       pt()
+}
+
+func (*PointedNode) pt() {}
+func (*PointedAO) pt()   {}
+
+type PointedNode struct {
+       Under, Above [3]int16
+}
+
+func PointedSameNode(pos [3]int16) PointedThing {
+       return &PointedNode{pos, pos}
+}
+
+type PointedAO struct {
+       ID AOID
+}
+
+func writePointedThing(w io.Writer, pt PointedThing) error {
+       buf := make([]byte, 2)
+       buf[0] = 0
+       switch pt.(type) {
+       case nil:
+               buf[1] = 0
+       case *PointedNode:
+               buf[1] = 1
+       case *PointedAO:
+               buf[1] = 2
+       default:
+               panic(pt)
+       }
+       if _, err := w.Write(buf); err != nil {
+               return err
+       }
+       if pt == nil {
+               return nil
+       }
+       return serialize(w, pt)
+}
+
+func readPointedThing(r io.Reader) (PointedThing, error) {
+       buf := make([]byte, 2)
+       if _, err := io.ReadFull(r, buf); err != nil {
+               return nil, err
+       }
+       if buf[0] != 0 {
+               return nil, fmt.Errorf("unsupported PointedThing version: %d", buf[0])
+       }
+       var pt PointedThing
+       switch buf[1] {
+       case 0:
+               return nil, nil
+       case 1:
+               pt = new(PointedNode)
+       case 2:
+               pt = new(PointedAO)
+       case 3:
+               return nil, fmt.Errorf("invalid PointedThing type: %d", buf[1])
+       }
+       return pt, deserialize(r, pt)
+}
diff --git a/pos.go b/pos.go
new file mode 100644 (file)
index 0000000..7242a6e
--- /dev/null
+++ b/pos.go
@@ -0,0 +1,38 @@
+package mt
+
+import "math"
+
+// A Pos is a world space position,
+// represented as a Vec from the origin.
+type Pos Vec
+
+// Add returns p+v.
+func (p Pos) Add(v Vec) Pos {
+       return Pos(Vec(p).Add(v))
+}
+
+// Sub returns p-v.
+func (p Pos) Sub(v Vec) Pos {
+       return Pos(Vec(p).Sub(v))
+}
+
+// From returns the Vec which moves to p from q.
+func (p Pos) From(q Pos) Vec {
+       return Vec(p).Sub(Vec(q))
+}
+
+// Int returns the position of the node which the Pos is inside.
+func (p Pos) Int() (ip [3]int16) {
+       for i := range ip {
+               ip[i] = int16(math.Round(float64(p[i]) / 10))
+       }
+       return
+}
+
+// IntPos returns the Pos of the node at ip.
+func IntPos(ip [3]int16) (p Pos) {
+       for i := range p {
+               p[i] = 10 * float32(ip[i])
+       }
+       return
+}
diff --git a/proto.go b/proto.go
new file mode 100644 (file)
index 0000000..b859a39
--- /dev/null
+++ b/proto.go
@@ -0,0 +1,101 @@
+package mt
+
+import (
+       "fmt"
+       "io"
+       "net"
+
+       "github.com/anon55555/mt/rudp"
+)
+
+const ChannelCount = rudp.ChannelCount
+
+// A Pkt is a deserialized rudp.Pkt.
+type Pkt struct {
+       Cmd
+       rudp.PktInfo
+}
+
+// Peer wraps rudp.Conn, adding (de)serialization.
+type Peer struct {
+       *rudp.Conn
+}
+
+func (p Peer) Send(pkt Pkt) (ack <-chan struct{}, err error) {
+       var cmdNo uint16
+       if p.IsSrv() {
+               cmdNo = pkt.Cmd.(ToSrvCmd).toSrvCmdNo()
+       } else {
+               cmdNo = pkt.Cmd.(ToCltCmd).toCltCmdNo()
+       }
+
+       r, w := io.Pipe()
+       go func() (err error) {
+               defer w.CloseWithError(err)
+
+               buf := make([]byte, 2)
+               be.PutUint16(buf, cmdNo)
+               if _, err := w.Write(buf); err != nil {
+                       return err
+               }
+               return serialize(w, pkt.Cmd)
+       }()
+
+       return p.Conn.Send(rudp.Pkt{r, pkt.PktInfo})
+}
+
+// SendCmd is equivalent to Send(Pkt{cmd, cmd.DefaultPktInfo()}).
+func (p Peer) SendCmd(cmd Cmd) (ack <-chan struct{}, err error) {
+       return p.Send(Pkt{cmd, cmd.DefaultPktInfo()})
+}
+
+func (p Peer) Recv() (_ Pkt, rerr error) {
+       pkt, err := p.Conn.Recv()
+       if err != nil {
+               return Pkt{}, err
+       }
+
+       buf := make([]byte, 2)
+       if _, err := io.ReadFull(pkt, buf); err != nil {
+               return Pkt{}, err
+       }
+       cmdNo := be.Uint16(buf)
+
+       var newCmd func() Cmd
+       if p.IsSrv() {
+               newCmd = newToCltCmd[cmdNo]
+       } else {
+               newCmd = newToSrvCmd[cmdNo]
+       }
+       if newCmd == nil {
+               return Pkt{}, fmt.Errorf("unknown cmd: %d", cmdNo)
+       }
+       cmd := newCmd()
+
+       if err := deserialize(pkt, cmd); err != nil {
+               return Pkt{}, fmt.Errorf("%T: %w", cmd, err)
+       }
+
+       extra, err := io.ReadAll(pkt)
+       if len(extra) > 0 {
+               err = rudp.TrailingDataError(extra)
+       }
+       return Pkt{cmd, pkt.PktInfo}, err
+}
+
+func Connect(conn net.Conn) Peer {
+       return Peer{rudp.Connect(conn)}
+}
+
+type Listener struct {
+       *rudp.Listener
+}
+
+func Listen(conn net.PacketConn) Listener {
+       return Listener{rudp.Listen(conn)}
+}
+
+func (l Listener) Accept() (Peer, error) {
+       rpeer, err := l.Listener.Accept()
+       return Peer{rpeer}, err
+}
diff --git a/rudp/cmd/proxy/proxy.go b/rudp/cmd/proxy/proxy.go
new file mode 100644 (file)
index 0000000..b8ca9f4
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+Proxy is a Minetest RUDP proxy server
+supporting multiple concurrent connections.
+
+Usage:
+       proxy dial:port listen:port
+where dial:port is the server address
+and listen:port is the address to listen on.
+*/
+package main
+
+import (
+       "errors"
+       "fmt"
+       "log"
+       "net"
+       "os"
+
+       "github.com/anon55555/mt/rudp"
+)
+
+func main() {
+       if len(os.Args) != 3 {
+               fmt.Fprintln(os.Stderr, "usage: proxy dial:port listen:port")
+               os.Exit(1)
+       }
+
+       pc, err := net.ListenPacket("udp", os.Args[2])
+       if err != nil {
+               log.Fatal(err)
+       }
+       defer pc.Close()
+
+       l := rudp.Listen(pc)
+       for {
+               clt, err := l.Accept()
+               if err != nil {
+                       log.Print("accept: ", err)
+                       continue
+               }
+
+               log.Print(clt.ID(), ": connected")
+
+               conn, err := net.Dial("udp", os.Args[1])
+               if err != nil {
+                       log.Print(err)
+                       continue
+               }
+               srv := rudp.Connect(conn)
+
+               go proxy(clt, srv)
+               go proxy(srv, clt)
+       }
+}
+
+func proxy(src, dest *rudp.Conn) {
+       s := fmt.Sprint(src.ID(), " (", src.RemoteAddr(), "): ")
+
+       for {
+               pkt, err := src.Recv()
+               if err != nil {
+                       if errors.Is(err, net.ErrClosed) {
+                               if err := src.WhyClosed(); err != nil {
+                                       log.Print(s, "disconnected: ", err)
+                               } else {
+                                       log.Print(s, "disconnected")
+                               }
+                               break
+                       }
+
+                       log.Print(s, err)
+                       continue
+               }
+
+               dest.Send(pkt)
+       }
+
+       dest.Close()
+}
diff --git a/rudp/proxy/proxy.go b/rudp/proxy/proxy.go
deleted file mode 100644 (file)
index b8ca9f4..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-Proxy is a Minetest RUDP proxy server
-supporting multiple concurrent connections.
-
-Usage:
-       proxy dial:port listen:port
-where dial:port is the server address
-and listen:port is the address to listen on.
-*/
-package main
-
-import (
-       "errors"
-       "fmt"
-       "log"
-       "net"
-       "os"
-
-       "github.com/anon55555/mt/rudp"
-)
-
-func main() {
-       if len(os.Args) != 3 {
-               fmt.Fprintln(os.Stderr, "usage: proxy dial:port listen:port")
-               os.Exit(1)
-       }
-
-       pc, err := net.ListenPacket("udp", os.Args[2])
-       if err != nil {
-               log.Fatal(err)
-       }
-       defer pc.Close()
-
-       l := rudp.Listen(pc)
-       for {
-               clt, err := l.Accept()
-               if err != nil {
-                       log.Print("accept: ", err)
-                       continue
-               }
-
-               log.Print(clt.ID(), ": connected")
-
-               conn, err := net.Dial("udp", os.Args[1])
-               if err != nil {
-                       log.Print(err)
-                       continue
-               }
-               srv := rudp.Connect(conn)
-
-               go proxy(clt, srv)
-               go proxy(srv, clt)
-       }
-}
-
-func proxy(src, dest *rudp.Conn) {
-       s := fmt.Sprint(src.ID(), " (", src.RemoteAddr(), "): ")
-
-       for {
-               pkt, err := src.Recv()
-               if err != nil {
-                       if errors.Is(err, net.ErrClosed) {
-                               if err := src.WhyClosed(); err != nil {
-                                       log.Print(s, "disconnected: ", err)
-                               } else {
-                                       log.Print(s, "disconnected")
-                               }
-                               break
-                       }
-
-                       log.Print(s, err)
-                       continue
-               }
-
-               dest.Send(pkt)
-       }
-
-       dest.Close()
-}
diff --git a/serialize.fmt b/serialize.fmt
new file mode 100644 (file)
index 0000000..c157001
--- /dev/null
@@ -0,0 +1,163 @@
+       func write8(w io.Writer, x uint8) {
+               _, err := w.Write([]byte{x})
+               chk(err)
+       }
+       
+       func write16(w io.Writer, x uint16) {
+               buf := make([]byte, 2)
+               be.PutUint16(buf, x)
+               _, err := w.Write(buf)
+               chk(err)
+       }
+       
+       func write32(w io.Writer, x uint32) {
+               buf := make([]byte, 4)
+               be.PutUint32(buf, x)
+               _, err := w.Write(buf)
+               chk(err)
+       }
+       
+       func write64(w io.Writer, x uint64) {
+               buf := make([]byte, 8)
+               be.PutUint64(buf, x)
+               _, err := w.Write(buf)
+               chk(err)
+       }
+
+byte   write8(w, uint8(x))
+uint8  write8(w, uint8(x))
+uint16 write16(w, uint16(x))
+uint32 write32(w, uint32(x))
+uint64 write64(w, uint64(x))
+
+int8   write8(w, uint8(x))
+int16  write16(w, uint16(x))
+int32  write32(w, uint32(x))
+int64  write64(w, uint64(x))
+
+bool   if x { write8(w, 1) } else { write8(w, 0) }
+
+float32        write32(w, math.Float32bits(x))
+float64        write64(w, math.Float64bits(x))
+
+AOMsg  writeAOMsg(w, x)
+
+image/color.NRGBA      w.Write([]byte{x.A, x.R, x.G, x.B})
+
+map[uint16]*NodeMeta   {
+               w := zlib.NewWriter(w)
+
+               if x == nil {
+                       write8(w, 0)
+               } else {
+                       write8(w, 2)
+                       if len(x) > math.MaxUint16 {
+                               chk(ErrTooLong)
+                       }
+                       write16(w, uint16(len(x)))
+                       keys := make([]uint16, 0, len(x))
+                       for key := range x {
+                               keys = append(keys, key)
+                       }
+                       sort.Slice(keys, func(i, j int) bool {
+                               i2pos := func(i int) [3]int16 {
+                                       return Blkpos2Pos([3]int16{}, keys[i])
+                               }
+
+                               p, q := i2pos(i), i2pos(j)
+
+                               for i := range p {
+                                       switch {
+                                       case p[i] < q[i]:
+                                               return true
+                                       case p[i] > q[i]:
+                                               return false
+                                       }
+                               }
+
+                               return false
+                       })
+                       for _, key := range keys {
+                               write16(w, key)
+                               chk(serialize(w, x[key]))
+                       }
+               }
+
+               chk(w.Close())
+       }
+
+map[[3]int16]*NodeMeta {
+               w := zlib.NewWriter(w)
+
+               if x == nil {
+                       write8(w, 0)
+               } else {
+                       write8(w, 2)
+                       if len(x) > math.MaxUint16 {
+                               chk(ErrTooLong)
+                       }
+                       write16(w, uint16(len(x)))
+                       keys := make([][3]int16, 0, len(x))
+                       for key := range x {
+                               keys = append(keys, key)
+                       }
+                       sort.Slice(keys, func(i, j int) bool {
+                               p, q := keys[i], keys[j]
+
+                               for i := range p {
+                                       switch {
+                                       case p[i] < q[i]:
+                                               return true
+                                       case p[i] > q[i]:
+                                               return false
+                                       }
+                               }
+
+                               return false
+                       })
+                       for _, key := range keys {
+                               for _, n := range key {
+                                       write16(w, uint16(n))
+                               }
+                               chk(serialize(w, x[key]))
+                       }
+               }
+
+               chk(w.Close())
+       }
+
+PointedThing   chk(writePointedThing(w, x))
+
+[]AOMsg        { // For AOInitData.Msgs
+               if len(x) > math.MaxUint8 {
+                       chk(ErrTooLong)
+               }
+               write8(w, uint8(len(x)))
+               for _, msg := range x {
+                       var b bytes.Buffer
+                       chk(writeAOMsg(&b, msg))
+                       if b.Len() > math.MaxUint32 {
+                               chk(ErrTooLong)
+                       }
+                       write32(w, uint32(b.Len()))
+                       _, err := b.WriteTo(w)
+                       chk(err)
+               }
+       }
+
+[]NodeDef      { // For ToCltNodeDefs.Defs
+               if len(x) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               write16(w, uint16(len(x)))
+               var b bytes.Buffer
+               for i := range x {
+                       x[i].serialize(&b)
+               }
+               if b.Len() > math.MaxUint32 {
+                       chk(ErrTooLong)
+               }
+               write32(w, uint32(b.Len()))
+               _, err := b.WriteTo(w)
+               chk(err)
+       }
diff --git a/serialize.go b/serialize.go
new file mode 100644 (file)
index 0000000..892e9f3
--- /dev/null
@@ -0,0 +1,35094 @@
+// Code generated by mkserialize.sh. DO NOT EDIT.
+
+package mt
+
+import (
+       "bytes"
+       "compress/zlib"
+       "crypto/sha1"
+       "errors"
+       "fmt"
+       "image/color"
+       "io"
+       "math"
+       "sort"
+       "unicode/utf16"
+)
+
+func write8(w io.Writer, x uint8) {
+       _, err := w.Write([]byte{x})
+       chk(err)
+}
+
+func write16(w io.Writer, x uint16) {
+       buf := make([]byte, 2)
+       be.PutUint16(buf, x)
+       _, err := w.Write(buf)
+       chk(err)
+}
+
+func write32(w io.Writer, x uint32) {
+       buf := make([]byte, 4)
+       be.PutUint32(buf, x)
+       _, err := w.Write(buf)
+       chk(err)
+}
+
+func write64(w io.Writer, x uint64) {
+       buf := make([]byte, 8)
+       be.PutUint64(buf, x)
+       _, err := w.Write(buf)
+       chk(err)
+}
+func readBuf(r io.Reader, n int) []byte {
+       buf := make([]byte, n)
+       _, err := io.ReadFull(r, buf)
+       chk(err)
+       return buf
+}
+
+func read8(r io.Reader) uint8   { return readBuf(r, 1)[0] }
+func read16(r io.Reader) uint16 { return be.Uint16(readBuf(r, 2)) }
+func read32(r io.Reader) uint32 { return be.Uint32(readBuf(r, 4)) }
+func read64(r io.Reader) uint64 { return be.Uint64(readBuf(r, 8)) }
+
+func (obj *ToSrvNil) serialize(w io.Writer) {
+}
+
+func (obj *ToSrvNil) deserialize(r io.Reader) {
+}
+
+func (obj *ToSrvInit) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       SerializeVer             uint8
+                       SupportedCompression     CompressionModes
+                       MinProtoVer, MaxProtoVer uint16
+                       PlayerName               string
+
+                       //mt:opt
+                       SendFullItemMeta bool
+               }))(obj)).SerializeVer
+               write8(w, uint8(x))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       SerializeVer             uint8
+                       SupportedCompression     CompressionModes
+                       MinProtoVer, MaxProtoVer uint16
+                       PlayerName               string
+
+                       //mt:opt
+                       SendFullItemMeta bool
+               }))(obj)).SupportedCompression).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.CompressionModes", err))
+       }
+       {
+               x := (*(*(struct {
+                       SerializeVer             uint8
+                       SupportedCompression     CompressionModes
+                       MinProtoVer, MaxProtoVer uint16
+                       PlayerName               string
+
+                       //mt:opt
+                       SendFullItemMeta bool
+               }))(obj)).MinProtoVer
+               write16(w, uint16(x))
+       }
+       {
+               x := (*(*(struct {
+                       SerializeVer             uint8
+                       SupportedCompression     CompressionModes
+                       MinProtoVer, MaxProtoVer uint16
+                       PlayerName               string
+
+                       //mt:opt
+                       SendFullItemMeta bool
+               }))(obj)).MaxProtoVer
+               write16(w, uint16(x))
+       }
+       if len(([]byte((*(*(struct {
+               SerializeVer             uint8
+               SupportedCompression     CompressionModes
+               MinProtoVer, MaxProtoVer uint16
+               PlayerName               string
+
+               //mt:opt
+               SendFullItemMeta bool
+       }))(obj)).PlayerName))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       SerializeVer             uint8
+                       SupportedCompression     CompressionModes
+                       MinProtoVer, MaxProtoVer uint16
+                       PlayerName               string
+
+                       //mt:opt
+                       SendFullItemMeta bool
+               }))(obj)).PlayerName))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       SerializeVer             uint8
+                       SupportedCompression     CompressionModes
+                       MinProtoVer, MaxProtoVer uint16
+                       PlayerName               string
+
+                       //mt:opt
+                       SendFullItemMeta bool
+               }))(obj)).PlayerName))[:])
+               chk(err)
+       }
+       if err := pcall(func() {
+               {
+                       x := (*(*(struct {
+                               SerializeVer             uint8
+                               SupportedCompression     CompressionModes
+                               MinProtoVer, MaxProtoVer uint16
+                               PlayerName               string
+
+                               //mt:opt
+                               SendFullItemMeta bool
+                       }))(obj)).SendFullItemMeta
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+       }); err != nil && err != io.EOF {
+               chk(err)
+       }
+}
+
+func (obj *ToSrvInit) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       SerializeVer             uint8
+                       SupportedCompression     CompressionModes
+                       MinProtoVer, MaxProtoVer uint16
+                       PlayerName               string
+
+                       //mt:opt
+                       SendFullItemMeta bool
+               }))(obj)).SerializeVer
+               *p = read8(r)
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       SerializeVer             uint8
+                       SupportedCompression     CompressionModes
+                       MinProtoVer, MaxProtoVer uint16
+                       PlayerName               string
+
+                       //mt:opt
+                       SendFullItemMeta bool
+               }))(obj)).SupportedCompression).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.CompressionModes", err))
+       }
+       {
+               p := &(*(*(struct {
+                       SerializeVer             uint8
+                       SupportedCompression     CompressionModes
+                       MinProtoVer, MaxProtoVer uint16
+                       PlayerName               string
+
+                       //mt:opt
+                       SendFullItemMeta bool
+               }))(obj)).MinProtoVer
+               *p = read16(r)
+       }
+       {
+               p := &(*(*(struct {
+                       SerializeVer             uint8
+                       SupportedCompression     CompressionModes
+                       MinProtoVer, MaxProtoVer uint16
+                       PlayerName               string
+
+                       //mt:opt
+                       SendFullItemMeta bool
+               }))(obj)).MaxProtoVer
+               *p = read16(r)
+       }
+       var local1 []uint8
+       var local2 uint16
+       {
+               p := &local2
+               *p = read16(r)
+       }
+       (local1) = make([]uint8, local2)
+       {
+               _, err := io.ReadFull(r, (local1)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               SerializeVer             uint8
+               SupportedCompression     CompressionModes
+               MinProtoVer, MaxProtoVer uint16
+               PlayerName               string
+
+               //mt:opt
+               SendFullItemMeta bool
+       }))(obj)).PlayerName) = string(local1)
+       if err := pcall(func() {
+               {
+                       p := &(*(*(struct {
+                               SerializeVer             uint8
+                               SupportedCompression     CompressionModes
+                               MinProtoVer, MaxProtoVer uint16
+                               PlayerName               string
+
+                               //mt:opt
+                               SendFullItemMeta bool
+                       }))(obj)).SendFullItemMeta
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+       }); err != nil && err != io.EOF {
+               chk(err)
+       }
+}
+
+func (obj *ToSrvInit2) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Lang string
+       }))(obj)).Lang))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Lang string
+               }))(obj)).Lang))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Lang string
+               }))(obj)).Lang))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToSrvInit2) deserialize(r io.Reader) {
+       var local3 []uint8
+       var local4 uint16
+       {
+               p := &local4
+               *p = read16(r)
+       }
+       (local3) = make([]uint8, local4)
+       {
+               _, err := io.ReadFull(r, (local3)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Lang string
+       }))(obj)).Lang) = string(local3)
+}
+
+func (obj *ToSrvModChanJoin) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Channel string
+       }))(obj)).Channel))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Channel string
+               }))(obj)).Channel))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Channel string
+               }))(obj)).Channel))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToSrvModChanJoin) deserialize(r io.Reader) {
+       var local5 []uint8
+       var local6 uint16
+       {
+               p := &local6
+               *p = read16(r)
+       }
+       (local5) = make([]uint8, local6)
+       {
+               _, err := io.ReadFull(r, (local5)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Channel string
+       }))(obj)).Channel) = string(local5)
+}
+
+func (obj *ToSrvModChanLeave) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Channel string
+       }))(obj)).Channel))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Channel string
+               }))(obj)).Channel))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Channel string
+               }))(obj)).Channel))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToSrvModChanLeave) deserialize(r io.Reader) {
+       var local7 []uint8
+       var local8 uint16
+       {
+               p := &local8
+               *p = read16(r)
+       }
+       (local7) = make([]uint8, local8)
+       {
+               _, err := io.ReadFull(r, (local7)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Channel string
+       }))(obj)).Channel) = string(local7)
+}
+
+func (obj *ToSrvModChanMsg) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Channel string
+               Msg     string
+       }))(obj)).Channel))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Channel string
+                       Msg     string
+               }))(obj)).Channel))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Channel string
+                       Msg     string
+               }))(obj)).Channel))[:])
+               chk(err)
+       }
+       if len(([]byte((*(*(struct {
+               Channel string
+               Msg     string
+       }))(obj)).Msg))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Channel string
+                       Msg     string
+               }))(obj)).Msg))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Channel string
+                       Msg     string
+               }))(obj)).Msg))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToSrvModChanMsg) deserialize(r io.Reader) {
+       var local9 []uint8
+       var local10 uint16
+       {
+               p := &local10
+               *p = read16(r)
+       }
+       (local9) = make([]uint8, local10)
+       {
+               _, err := io.ReadFull(r, (local9)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Channel string
+               Msg     string
+       }))(obj)).Channel) = string(local9)
+       var local11 []uint8
+       var local12 uint16
+       {
+               p := &local12
+               *p = read16(r)
+       }
+       (local11) = make([]uint8, local12)
+       {
+               _, err := io.ReadFull(r, (local11)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Channel string
+               Msg     string
+       }))(obj)).Msg) = string(local11)
+}
+
+func (obj *ToSrvPlayerPos) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos PlayerPos
+               }))(obj)).Pos).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.PlayerPos", err))
+       }
+}
+
+func (obj *ToSrvPlayerPos) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos PlayerPos
+               }))(obj)).Pos).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.PlayerPos", err))
+       }
+}
+
+func (obj *ToSrvGotBlks) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               //mt:len8
+               Blks [][3]int16
+       }))(obj)).Blks)) > math.MaxUint8 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint8(len(((*(*(struct {
+                       //mt:len8
+                       Blks [][3]int16
+               }))(obj)).Blks)))
+               write8(w, uint8(x))
+       }
+       for local13 := range (*(*(struct {
+               //mt:len8
+               Blks [][3]int16
+       }))(obj)).Blks {
+               for local14 := range ((*(*(struct {
+                       //mt:len8
+                       Blks [][3]int16
+               }))(obj)).Blks)[local13] {
+                       {
+                               x := (((*(*(struct {
+                                       //mt:len8
+                                       Blks [][3]int16
+                               }))(obj)).Blks)[local13])[local14]
+                               write16(w, uint16(x))
+                       }
+               }
+       }
+}
+
+func (obj *ToSrvGotBlks) deserialize(r io.Reader) {
+       var local15 uint8
+       {
+               p := &local15
+               *p = read8(r)
+       }
+       ((*(*(struct {
+               //mt:len8
+               Blks [][3]int16
+       }))(obj)).Blks) = make([][3]int16, local15)
+       for local16 := range (*(*(struct {
+               //mt:len8
+               Blks [][3]int16
+       }))(obj)).Blks {
+               for local17 := range ((*(*(struct {
+                       //mt:len8
+                       Blks [][3]int16
+               }))(obj)).Blks)[local16] {
+                       {
+                               p := &(((*(*(struct {
+                                       //mt:len8
+                                       Blks [][3]int16
+                               }))(obj)).Blks)[local16])[local17]
+                               *p = int16(read16(r))
+                       }
+               }
+       }
+}
+
+func (obj *ToSrvDeletedBlks) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               //mt:len8
+               Blks [][3]int16
+       }))(obj)).Blks)) > math.MaxUint8 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint8(len(((*(*(struct {
+                       //mt:len8
+                       Blks [][3]int16
+               }))(obj)).Blks)))
+               write8(w, uint8(x))
+       }
+       for local18 := range (*(*(struct {
+               //mt:len8
+               Blks [][3]int16
+       }))(obj)).Blks {
+               for local19 := range ((*(*(struct {
+                       //mt:len8
+                       Blks [][3]int16
+               }))(obj)).Blks)[local18] {
+                       {
+                               x := (((*(*(struct {
+                                       //mt:len8
+                                       Blks [][3]int16
+                               }))(obj)).Blks)[local18])[local19]
+                               write16(w, uint16(x))
+                       }
+               }
+       }
+}
+
+func (obj *ToSrvDeletedBlks) deserialize(r io.Reader) {
+       var local20 uint8
+       {
+               p := &local20
+               *p = read8(r)
+       }
+       ((*(*(struct {
+               //mt:len8
+               Blks [][3]int16
+       }))(obj)).Blks) = make([][3]int16, local20)
+       for local21 := range (*(*(struct {
+               //mt:len8
+               Blks [][3]int16
+       }))(obj)).Blks {
+               for local22 := range ((*(*(struct {
+                       //mt:len8
+                       Blks [][3]int16
+               }))(obj)).Blks)[local21] {
+                       {
+                               p := &(((*(*(struct {
+                                       //mt:len8
+                                       Blks [][3]int16
+                               }))(obj)).Blks)[local21])[local22]
+                               *p = int16(read16(r))
+                       }
+               }
+       }
+}
+
+func (obj *ToSrvInvAction) serialize(w io.Writer) {
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       //mt:raw
+                       Action string
+               }))(obj)).Action))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToSrvInvAction) deserialize(r io.Reader) {
+       var local23 []uint8
+       for {
+               var local24 uint8
+               err := pcall(func() {
+                       {
+                               p := &local24
+                               *p = read8(r)
+                       }
+               })
+               if err == io.EOF {
+                       break
+               }
+               (local23) = append((local23), local24)
+               chk(err)
+       }
+       ((*(*(struct {
+               //mt:raw
+               Action string
+       }))(obj)).Action) = string(local23)
+}
+
+func (obj *ToSrvChatMsg) serialize(w io.Writer) {
+       if len((utf16.Encode([]rune((*(*(struct {
+               //mt:utf16
+               Msg string
+       }))(obj)).Msg)))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len((utf16.Encode([]rune((*(*(struct {
+                       //mt:utf16
+                       Msg string
+               }))(obj)).Msg)))))
+               write16(w, uint16(x))
+       }
+       for local25 := range utf16.Encode([]rune((*(*(struct {
+               //mt:utf16
+               Msg string
+       }))(obj)).Msg)) {
+               {
+                       x := (utf16.Encode([]rune((*(*(struct {
+                               //mt:utf16
+                               Msg string
+                       }))(obj)).Msg)))[local25]
+                       write16(w, uint16(x))
+               }
+       }
+}
+
+func (obj *ToSrvChatMsg) deserialize(r io.Reader) {
+       var local26 []uint16
+       var local27 uint16
+       {
+               p := &local27
+               *p = read16(r)
+       }
+       (local26) = make([]uint16, local27)
+       for local28 := range local26 {
+               {
+                       p := &(local26)[local28]
+                       *p = read16(r)
+               }
+       }
+       (*(*(struct {
+               //mt:utf16
+               Msg string
+       }))(obj)).Msg = string(utf16.Decode(local26))
+}
+
+func (obj *ToSrvFallDmg) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Amount uint16
+               }))(obj)).Amount
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *ToSrvFallDmg) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Amount uint16
+               }))(obj)).Amount
+               *p = read16(r)
+       }
+}
+
+func (obj *ToSrvSelectItem) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Slot uint16
+               }))(obj)).Slot
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *ToSrvSelectItem) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Slot uint16
+               }))(obj)).Slot
+               *p = read16(r)
+       }
+}
+
+func (obj *ToSrvRespawn) serialize(w io.Writer) {
+}
+
+func (obj *ToSrvRespawn) deserialize(r io.Reader) {
+}
+
+func (obj *ToSrvInteract) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Action   Interaction
+                       ItemSlot uint16
+                       //mt:lenhdr 32
+                       Pointed PointedThing
+                       //mt:end
+                       Pos PlayerPos
+               }))(obj)).Action).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Interaction", err))
+       }
+       {
+               x := (*(*(struct {
+                       Action   Interaction
+                       ItemSlot uint16
+                       //mt:lenhdr 32
+                       Pointed PointedThing
+                       //mt:end
+                       Pos PlayerPos
+               }))(obj)).ItemSlot
+               write16(w, uint16(x))
+       }
+       {
+               ow := w
+               w := new(bytes.Buffer)
+               {
+                       x := (*(*(struct {
+                               Action   Interaction
+                               ItemSlot uint16
+                               //mt:lenhdr 32
+                               Pointed PointedThing
+                               //mt:end
+                               Pos PlayerPos
+                       }))(obj)).Pointed
+                       chk(writePointedThing(w, x))
+               }
+               {
+                       buf := w
+                       w := ow
+                       if len((buf.Bytes())) > math.MaxUint32 {
+                               chk(ErrTooLong)
+                       }
+                       {
+                               x := uint32(len((buf.Bytes())))
+                               write32(w, uint32(x))
+                       }
+                       {
+                               _, err := w.Write((buf.Bytes())[:])
+                               chk(err)
+                       }
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Action   Interaction
+                       ItemSlot uint16
+                       //mt:lenhdr 32
+                       Pointed PointedThing
+                       //mt:end
+                       Pos PlayerPos
+               }))(obj)).Pos).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.PlayerPos", err))
+       }
+}
+
+func (obj *ToSrvInteract) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Action   Interaction
+                       ItemSlot uint16
+                       //mt:lenhdr 32
+                       Pointed PointedThing
+                       //mt:end
+                       Pos PlayerPos
+               }))(obj)).Action).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Interaction", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Action   Interaction
+                       ItemSlot uint16
+                       //mt:lenhdr 32
+                       Pointed PointedThing
+                       //mt:end
+                       Pos PlayerPos
+               }))(obj)).ItemSlot
+               *p = read16(r)
+       }
+       {
+               var n uint32
+               {
+                       p := &n
+                       *p = read32(r)
+               }
+               r := &io.LimitedReader{r, int64(n)}
+               {
+                       p := &(*(*(struct {
+                               Action   Interaction
+                               ItemSlot uint16
+                               //mt:lenhdr 32
+                               Pointed PointedThing
+                               //mt:end
+                               Pos PlayerPos
+                       }))(obj)).Pointed
+                       {
+                               var err error
+                               *p, err = readPointedThing(r)
+                               chk(err)
+                       }
+               }
+               if r.N > 0 {
+                       chk(fmt.Errorf("%d bytes of trailing data", r.N))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Action   Interaction
+                       ItemSlot uint16
+                       //mt:lenhdr 32
+                       Pointed PointedThing
+                       //mt:end
+                       Pos PlayerPos
+               }))(obj)).Pos).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.PlayerPos", err))
+       }
+}
+
+func (obj *ToSrvRemovedSounds) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               IDs []SoundID
+       }))(obj)).IDs)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       IDs []SoundID
+               }))(obj)).IDs)))
+               write16(w, uint16(x))
+       }
+       for local29 := range (*(*(struct {
+               IDs []SoundID
+       }))(obj)).IDs {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               IDs []SoundID
+                       }))(obj)).IDs)[local29]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundID", err))
+               }
+       }
+}
+
+func (obj *ToSrvRemovedSounds) deserialize(r io.Reader) {
+       var local30 uint16
+       {
+               p := &local30
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               IDs []SoundID
+       }))(obj)).IDs) = make([]SoundID, local30)
+       for local31 := range (*(*(struct {
+               IDs []SoundID
+       }))(obj)).IDs {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               IDs []SoundID
+                       }))(obj)).IDs)[local31]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundID", err))
+               }
+       }
+}
+
+func (obj *ToSrvNodeMetaFields) serialize(w io.Writer) {
+       for local32 := range (*(*(struct {
+               Pos      [3]int16
+               Formname string
+               Fields   []Field
+       }))(obj)).Pos {
+               {
+                       x := ((*(*(struct {
+                               Pos      [3]int16
+                               Formname string
+                               Fields   []Field
+                       }))(obj)).Pos)[local32]
+                       write16(w, uint16(x))
+               }
+       }
+       if len(([]byte((*(*(struct {
+               Pos      [3]int16
+               Formname string
+               Fields   []Field
+       }))(obj)).Formname))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Pos      [3]int16
+                       Formname string
+                       Fields   []Field
+               }))(obj)).Formname))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Pos      [3]int16
+                       Formname string
+                       Fields   []Field
+               }))(obj)).Formname))[:])
+               chk(err)
+       }
+       if len(((*(*(struct {
+               Pos      [3]int16
+               Formname string
+               Fields   []Field
+       }))(obj)).Fields)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Pos      [3]int16
+                       Formname string
+                       Fields   []Field
+               }))(obj)).Fields)))
+               write16(w, uint16(x))
+       }
+       for local33 := range (*(*(struct {
+               Pos      [3]int16
+               Formname string
+               Fields   []Field
+       }))(obj)).Fields {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Pos      [3]int16
+                               Formname string
+                               Fields   []Field
+                       }))(obj)).Fields)[local33]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Field", err))
+               }
+       }
+}
+
+func (obj *ToSrvNodeMetaFields) deserialize(r io.Reader) {
+       for local34 := range (*(*(struct {
+               Pos      [3]int16
+               Formname string
+               Fields   []Field
+       }))(obj)).Pos {
+               {
+                       p := &((*(*(struct {
+                               Pos      [3]int16
+                               Formname string
+                               Fields   []Field
+                       }))(obj)).Pos)[local34]
+                       *p = int16(read16(r))
+               }
+       }
+       var local35 []uint8
+       var local36 uint16
+       {
+               p := &local36
+               *p = read16(r)
+       }
+       (local35) = make([]uint8, local36)
+       {
+               _, err := io.ReadFull(r, (local35)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Pos      [3]int16
+               Formname string
+               Fields   []Field
+       }))(obj)).Formname) = string(local35)
+       var local37 uint16
+       {
+               p := &local37
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Pos      [3]int16
+               Formname string
+               Fields   []Field
+       }))(obj)).Fields) = make([]Field, local37)
+       for local38 := range (*(*(struct {
+               Pos      [3]int16
+               Formname string
+               Fields   []Field
+       }))(obj)).Fields {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Pos      [3]int16
+                               Formname string
+                               Fields   []Field
+                       }))(obj)).Fields)[local38]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Field", err))
+               }
+       }
+}
+
+func (obj *ToSrvInvFields) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Formname string
+               Fields   []Field
+       }))(obj)).Formname))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Formname string
+                       Fields   []Field
+               }))(obj)).Formname))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Formname string
+                       Fields   []Field
+               }))(obj)).Formname))[:])
+               chk(err)
+       }
+       if len(((*(*(struct {
+               Formname string
+               Fields   []Field
+       }))(obj)).Fields)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Formname string
+                       Fields   []Field
+               }))(obj)).Fields)))
+               write16(w, uint16(x))
+       }
+       for local39 := range (*(*(struct {
+               Formname string
+               Fields   []Field
+       }))(obj)).Fields {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Formname string
+                               Fields   []Field
+                       }))(obj)).Fields)[local39]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Field", err))
+               }
+       }
+}
+
+func (obj *ToSrvInvFields) deserialize(r io.Reader) {
+       var local40 []uint8
+       var local41 uint16
+       {
+               p := &local41
+               *p = read16(r)
+       }
+       (local40) = make([]uint8, local41)
+       {
+               _, err := io.ReadFull(r, (local40)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Formname string
+               Fields   []Field
+       }))(obj)).Formname) = string(local40)
+       var local42 uint16
+       {
+               p := &local42
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Formname string
+               Fields   []Field
+       }))(obj)).Fields) = make([]Field, local42)
+       for local43 := range (*(*(struct {
+               Formname string
+               Fields   []Field
+       }))(obj)).Fields {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Formname string
+                               Fields   []Field
+                       }))(obj)).Fields)[local43]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Field", err))
+               }
+       }
+}
+
+func (obj *ToSrvReqMedia) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               Filenames []string
+       }))(obj)).Filenames)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Filenames []string
+               }))(obj)).Filenames)))
+               write16(w, uint16(x))
+       }
+       for local44 := range (*(*(struct {
+               Filenames []string
+       }))(obj)).Filenames {
+               if len(([]byte(((*(*(struct {
+                       Filenames []string
+               }))(obj)).Filenames)[local44]))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte(((*(*(struct {
+                               Filenames []string
+                       }))(obj)).Filenames)[local44]))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte(((*(*(struct {
+                               Filenames []string
+                       }))(obj)).Filenames)[local44]))[:])
+                       chk(err)
+               }
+       }
+}
+
+func (obj *ToSrvReqMedia) deserialize(r io.Reader) {
+       var local45 uint16
+       {
+               p := &local45
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Filenames []string
+       }))(obj)).Filenames) = make([]string, local45)
+       for local46 := range (*(*(struct {
+               Filenames []string
+       }))(obj)).Filenames {
+               var local47 []uint8
+               var local48 uint16
+               {
+                       p := &local48
+                       *p = read16(r)
+               }
+               (local47) = make([]uint8, local48)
+               {
+                       _, err := io.ReadFull(r, (local47)[:])
+                       chk(err)
+               }
+               (((*(*(struct {
+                       Filenames []string
+               }))(obj)).Filenames)[local46]) = string(local47)
+       }
+}
+
+func (obj *ToSrvCltReady) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       // Version information.
+                       Major, Minor, Patch uint8
+                       Reserved            uint8
+                       Version             string
+                       Formspec            uint16
+               }))(obj)).Major
+               write8(w, uint8(x))
+       }
+       {
+               x := (*(*(struct {
+                       // Version information.
+                       Major, Minor, Patch uint8
+                       Reserved            uint8
+                       Version             string
+                       Formspec            uint16
+               }))(obj)).Minor
+               write8(w, uint8(x))
+       }
+       {
+               x := (*(*(struct {
+                       // Version information.
+                       Major, Minor, Patch uint8
+                       Reserved            uint8
+                       Version             string
+                       Formspec            uint16
+               }))(obj)).Patch
+               write8(w, uint8(x))
+       }
+       {
+               x := (*(*(struct {
+                       // Version information.
+                       Major, Minor, Patch uint8
+                       Reserved            uint8
+                       Version             string
+                       Formspec            uint16
+               }))(obj)).Reserved
+               write8(w, uint8(x))
+       }
+       if len(([]byte((*(*(struct {
+               // Version information.
+               Major, Minor, Patch uint8
+               Reserved            uint8
+               Version             string
+               Formspec            uint16
+       }))(obj)).Version))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       // Version information.
+                       Major, Minor, Patch uint8
+                       Reserved            uint8
+                       Version             string
+                       Formspec            uint16
+               }))(obj)).Version))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       // Version information.
+                       Major, Minor, Patch uint8
+                       Reserved            uint8
+                       Version             string
+                       Formspec            uint16
+               }))(obj)).Version))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       // Version information.
+                       Major, Minor, Patch uint8
+                       Reserved            uint8
+                       Version             string
+                       Formspec            uint16
+               }))(obj)).Formspec
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *ToSrvCltReady) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       // Version information.
+                       Major, Minor, Patch uint8
+                       Reserved            uint8
+                       Version             string
+                       Formspec            uint16
+               }))(obj)).Major
+               *p = read8(r)
+       }
+       {
+               p := &(*(*(struct {
+                       // Version information.
+                       Major, Minor, Patch uint8
+                       Reserved            uint8
+                       Version             string
+                       Formspec            uint16
+               }))(obj)).Minor
+               *p = read8(r)
+       }
+       {
+               p := &(*(*(struct {
+                       // Version information.
+                       Major, Minor, Patch uint8
+                       Reserved            uint8
+                       Version             string
+                       Formspec            uint16
+               }))(obj)).Patch
+               *p = read8(r)
+       }
+       {
+               p := &(*(*(struct {
+                       // Version information.
+                       Major, Minor, Patch uint8
+                       Reserved            uint8
+                       Version             string
+                       Formspec            uint16
+               }))(obj)).Reserved
+               *p = read8(r)
+       }
+       var local49 []uint8
+       var local50 uint16
+       {
+               p := &local50
+               *p = read16(r)
+       }
+       (local49) = make([]uint8, local50)
+       {
+               _, err := io.ReadFull(r, (local49)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               // Version information.
+               Major, Minor, Patch uint8
+               Reserved            uint8
+               Version             string
+               Formspec            uint16
+       }))(obj)).Version) = string(local49)
+       {
+               p := &(*(*(struct {
+                       // Version information.
+                       Major, Minor, Patch uint8
+                       Reserved            uint8
+                       Version             string
+                       Formspec            uint16
+               }))(obj)).Formspec
+               *p = read16(r)
+       }
+}
+
+func (obj *ToSrvFirstSRP) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               Salt        []byte
+               Verifier    []byte
+               EmptyPasswd bool
+       }))(obj)).Salt)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Salt        []byte
+                       Verifier    []byte
+                       EmptyPasswd bool
+               }))(obj)).Salt)))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(((*(*(struct {
+                       Salt        []byte
+                       Verifier    []byte
+                       EmptyPasswd bool
+               }))(obj)).Salt)[:])
+               chk(err)
+       }
+       if len(((*(*(struct {
+               Salt        []byte
+               Verifier    []byte
+               EmptyPasswd bool
+       }))(obj)).Verifier)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Salt        []byte
+                       Verifier    []byte
+                       EmptyPasswd bool
+               }))(obj)).Verifier)))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(((*(*(struct {
+                       Salt        []byte
+                       Verifier    []byte
+                       EmptyPasswd bool
+               }))(obj)).Verifier)[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       Salt        []byte
+                       Verifier    []byte
+                       EmptyPasswd bool
+               }))(obj)).EmptyPasswd
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+}
+
+func (obj *ToSrvFirstSRP) deserialize(r io.Reader) {
+       var local51 uint16
+       {
+               p := &local51
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Salt        []byte
+               Verifier    []byte
+               EmptyPasswd bool
+       }))(obj)).Salt) = make([]byte, local51)
+       {
+               _, err := io.ReadFull(r, ((*(*(struct {
+                       Salt        []byte
+                       Verifier    []byte
+                       EmptyPasswd bool
+               }))(obj)).Salt)[:])
+               chk(err)
+       }
+       var local52 uint16
+       {
+               p := &local52
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Salt        []byte
+               Verifier    []byte
+               EmptyPasswd bool
+       }))(obj)).Verifier) = make([]byte, local52)
+       {
+               _, err := io.ReadFull(r, ((*(*(struct {
+                       Salt        []byte
+                       Verifier    []byte
+                       EmptyPasswd bool
+               }))(obj)).Verifier)[:])
+               chk(err)
+       }
+       {
+               p := &(*(*(struct {
+                       Salt        []byte
+                       Verifier    []byte
+                       EmptyPasswd bool
+               }))(obj)).EmptyPasswd
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+}
+
+func (obj *ToSrvSRPBytesA) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               A      []byte
+               NoSHA1 bool
+       }))(obj)).A)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       A      []byte
+                       NoSHA1 bool
+               }))(obj)).A)))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(((*(*(struct {
+                       A      []byte
+                       NoSHA1 bool
+               }))(obj)).A)[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       A      []byte
+                       NoSHA1 bool
+               }))(obj)).NoSHA1
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+}
+
+func (obj *ToSrvSRPBytesA) deserialize(r io.Reader) {
+       var local53 uint16
+       {
+               p := &local53
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               A      []byte
+               NoSHA1 bool
+       }))(obj)).A) = make([]byte, local53)
+       {
+               _, err := io.ReadFull(r, ((*(*(struct {
+                       A      []byte
+                       NoSHA1 bool
+               }))(obj)).A)[:])
+               chk(err)
+       }
+       {
+               p := &(*(*(struct {
+                       A      []byte
+                       NoSHA1 bool
+               }))(obj)).NoSHA1
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+}
+
+func (obj *ToSrvSRPBytesM) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               M []byte
+       }))(obj)).M)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       M []byte
+               }))(obj)).M)))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(((*(*(struct {
+                       M []byte
+               }))(obj)).M)[:])
+               chk(err)
+       }
+}
+
+func (obj *ToSrvSRPBytesM) deserialize(r io.Reader) {
+       var local54 uint16
+       {
+               p := &local54
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               M []byte
+       }))(obj)).M) = make([]byte, local54)
+       {
+               _, err := io.ReadFull(r, ((*(*(struct {
+                       M []byte
+               }))(obj)).M)[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltHello) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       SerializeVer uint8
+                       Compression  CompressionModes
+                       ProtoVer     uint16
+                       AuthMethods
+                       Username string
+               }))(obj)).SerializeVer
+               write8(w, uint8(x))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       SerializeVer uint8
+                       Compression  CompressionModes
+                       ProtoVer     uint16
+                       AuthMethods
+                       Username string
+               }))(obj)).Compression).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.CompressionModes", err))
+       }
+       {
+               x := (*(*(struct {
+                       SerializeVer uint8
+                       Compression  CompressionModes
+                       ProtoVer     uint16
+                       AuthMethods
+                       Username string
+               }))(obj)).ProtoVer
+               write16(w, uint16(x))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       SerializeVer uint8
+                       Compression  CompressionModes
+                       ProtoVer     uint16
+                       AuthMethods
+                       Username string
+               }))(obj)).AuthMethods).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AuthMethods", err))
+       }
+       if len(([]byte((*(*(struct {
+               SerializeVer uint8
+               Compression  CompressionModes
+               ProtoVer     uint16
+               AuthMethods
+               Username string
+       }))(obj)).Username))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       SerializeVer uint8
+                       Compression  CompressionModes
+                       ProtoVer     uint16
+                       AuthMethods
+                       Username string
+               }))(obj)).Username))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       SerializeVer uint8
+                       Compression  CompressionModes
+                       ProtoVer     uint16
+                       AuthMethods
+                       Username string
+               }))(obj)).Username))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltHello) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       SerializeVer uint8
+                       Compression  CompressionModes
+                       ProtoVer     uint16
+                       AuthMethods
+                       Username string
+               }))(obj)).SerializeVer
+               *p = read8(r)
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       SerializeVer uint8
+                       Compression  CompressionModes
+                       ProtoVer     uint16
+                       AuthMethods
+                       Username string
+               }))(obj)).Compression).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.CompressionModes", err))
+       }
+       {
+               p := &(*(*(struct {
+                       SerializeVer uint8
+                       Compression  CompressionModes
+                       ProtoVer     uint16
+                       AuthMethods
+                       Username string
+               }))(obj)).ProtoVer
+               *p = read16(r)
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       SerializeVer uint8
+                       Compression  CompressionModes
+                       ProtoVer     uint16
+                       AuthMethods
+                       Username string
+               }))(obj)).AuthMethods).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AuthMethods", err))
+       }
+       var local55 []uint8
+       var local56 uint16
+       {
+               p := &local56
+               *p = read16(r)
+       }
+       (local55) = make([]uint8, local56)
+       {
+               _, err := io.ReadFull(r, (local55)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               SerializeVer uint8
+               Compression  CompressionModes
+               ProtoVer     uint16
+               AuthMethods
+               Username string
+       }))(obj)).Username) = string(local55)
+}
+
+func (obj *ToCltAcceptAuth) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       // The client does the equivalent of
+                       //      PlayerPos[1] -= 5
+                       // before using PlayerPos.
+                       PlayerPos Pos
+
+                       MapSeed         uint64
+                       SendInterval    float32
+                       SudoAuthMethods AuthMethods
+               }))(obj)).PlayerPos).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+       {
+               x := (*(*(struct {
+                       // The client does the equivalent of
+                       //      PlayerPos[1] -= 5
+                       // before using PlayerPos.
+                       PlayerPos Pos
+
+                       MapSeed         uint64
+                       SendInterval    float32
+                       SudoAuthMethods AuthMethods
+               }))(obj)).MapSeed
+               write64(w, uint64(x))
+       }
+       {
+               x := (*(*(struct {
+                       // The client does the equivalent of
+                       //      PlayerPos[1] -= 5
+                       // before using PlayerPos.
+                       PlayerPos Pos
+
+                       MapSeed         uint64
+                       SendInterval    float32
+                       SudoAuthMethods AuthMethods
+               }))(obj)).SendInterval
+               write32(w, math.Float32bits(x))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       // The client does the equivalent of
+                       //      PlayerPos[1] -= 5
+                       // before using PlayerPos.
+                       PlayerPos Pos
+
+                       MapSeed         uint64
+                       SendInterval    float32
+                       SudoAuthMethods AuthMethods
+               }))(obj)).SudoAuthMethods).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AuthMethods", err))
+       }
+}
+
+func (obj *ToCltAcceptAuth) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       // The client does the equivalent of
+                       //      PlayerPos[1] -= 5
+                       // before using PlayerPos.
+                       PlayerPos Pos
+
+                       MapSeed         uint64
+                       SendInterval    float32
+                       SudoAuthMethods AuthMethods
+               }))(obj)).PlayerPos).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+       {
+               p := &(*(*(struct {
+                       // The client does the equivalent of
+                       //      PlayerPos[1] -= 5
+                       // before using PlayerPos.
+                       PlayerPos Pos
+
+                       MapSeed         uint64
+                       SendInterval    float32
+                       SudoAuthMethods AuthMethods
+               }))(obj)).MapSeed
+               *p = read64(r)
+       }
+       {
+               p := &(*(*(struct {
+                       // The client does the equivalent of
+                       //      PlayerPos[1] -= 5
+                       // before using PlayerPos.
+                       PlayerPos Pos
+
+                       MapSeed         uint64
+                       SendInterval    float32
+                       SudoAuthMethods AuthMethods
+               }))(obj)).SendInterval
+               *p = math.Float32frombits(read32(r))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       // The client does the equivalent of
+                       //      PlayerPos[1] -= 5
+                       // before using PlayerPos.
+                       PlayerPos Pos
+
+                       MapSeed         uint64
+                       SendInterval    float32
+                       SudoAuthMethods AuthMethods
+               }))(obj)).SudoAuthMethods).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AuthMethods", err))
+       }
+}
+
+func (obj *ToCltAcceptSudoMode) serialize(w io.Writer) {
+}
+
+func (obj *ToCltAcceptSudoMode) deserialize(r io.Reader) {
+}
+
+func (obj *ToCltDenySudoMode) serialize(w io.Writer) {
+}
+
+func (obj *ToCltDenySudoMode) deserialize(r io.Reader) {
+}
+
+func (obj *ToCltDisco) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Reason DiscoReason
+
+                       //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+                       Custom string
+
+                       //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+                       Reconnect bool
+               }))(obj)).Reason).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.DiscoReason", err))
+       }
+       if !((*(*(struct {
+               Reason DiscoReason
+
+               //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+               Custom string
+
+               //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+               Reconnect bool
+       }))(obj)).Reason < maxDiscoReason) {
+               chk(errors.New("assertion failed: %s.Reason < maxDiscoReason"))
+       }
+       if dr := (*(*(struct {
+               Reason DiscoReason
+
+               //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+               Custom string
+
+               //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+               Reconnect bool
+       }))(obj)).Reason; dr == Custom || dr == Shutdown || dr == Crash {
+               if len(([]byte((*(*(struct {
+                       Reason DiscoReason
+
+                       //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+                       Custom string
+
+                       //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+                       Reconnect bool
+               }))(obj)).Custom))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               Reason DiscoReason
+
+                               //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+                               Custom string
+
+                               //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+                               Reconnect bool
+                       }))(obj)).Custom))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               Reason DiscoReason
+
+                               //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+                               Custom string
+
+                               //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+                               Reconnect bool
+                       }))(obj)).Custom))[:])
+                       chk(err)
+               }
+       }
+       if dr := (*(*(struct {
+               Reason DiscoReason
+
+               //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+               Custom string
+
+               //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+               Reconnect bool
+       }))(obj)).Reason; dr == Shutdown || dr == Crash {
+               {
+                       x := (*(*(struct {
+                               Reason DiscoReason
+
+                               //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+                               Custom string
+
+                               //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+                               Reconnect bool
+                       }))(obj)).Reconnect
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+       }
+}
+
+func (obj *ToCltDisco) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Reason DiscoReason
+
+                       //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+                       Custom string
+
+                       //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+                       Reconnect bool
+               }))(obj)).Reason).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.DiscoReason", err))
+       }
+       if !((*(*(struct {
+               Reason DiscoReason
+
+               //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+               Custom string
+
+               //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+               Reconnect bool
+       }))(obj)).Reason < maxDiscoReason) {
+               chk(errors.New("assertion failed: %s.Reason < maxDiscoReason"))
+       }
+       if dr := (*(*(struct {
+               Reason DiscoReason
+
+               //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+               Custom string
+
+               //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+               Reconnect bool
+       }))(obj)).Reason; dr == Custom || dr == Shutdown || dr == Crash {
+               var local57 []uint8
+               var local58 uint16
+               {
+                       p := &local58
+                       *p = read16(r)
+               }
+               (local57) = make([]uint8, local58)
+               {
+                       _, err := io.ReadFull(r, (local57)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       Reason DiscoReason
+
+                       //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+                       Custom string
+
+                       //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+                       Reconnect bool
+               }))(obj)).Custom) = string(local57)
+       }
+       if dr := (*(*(struct {
+               Reason DiscoReason
+
+               //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+               Custom string
+
+               //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+               Reconnect bool
+       }))(obj)).Reason; dr == Shutdown || dr == Crash {
+               {
+                       p := &(*(*(struct {
+                               Reason DiscoReason
+
+                               //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+                               Custom string
+
+                               //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+                               Reconnect bool
+                       }))(obj)).Reconnect
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+       }
+}
+
+func (obj *ToCltBlkData) serialize(w io.Writer) {
+       for local59 := range (*(*(struct {
+               Blkpos [3]int16
+               Blk    MapBlk
+       }))(obj)).Blkpos {
+               {
+                       x := ((*(*(struct {
+                               Blkpos [3]int16
+                               Blk    MapBlk
+                       }))(obj)).Blkpos)[local59]
+                       write16(w, uint16(x))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Blkpos [3]int16
+                       Blk    MapBlk
+               }))(obj)).Blk).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.MapBlk", err))
+       }
+}
+
+func (obj *ToCltBlkData) deserialize(r io.Reader) {
+       for local60 := range (*(*(struct {
+               Blkpos [3]int16
+               Blk    MapBlk
+       }))(obj)).Blkpos {
+               {
+                       p := &((*(*(struct {
+                               Blkpos [3]int16
+                               Blk    MapBlk
+                       }))(obj)).Blkpos)[local60]
+                       *p = int16(read16(r))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Blkpos [3]int16
+                       Blk    MapBlk
+               }))(obj)).Blk).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.MapBlk", err))
+       }
+}
+
+func (obj *ToCltAddNode) serialize(w io.Writer) {
+       for local61 := range (*(*(struct {
+               Pos [3]int16
+               Node
+               KeepMeta bool
+       }))(obj)).Pos {
+               {
+                       x := ((*(*(struct {
+                               Pos [3]int16
+                               Node
+                               KeepMeta bool
+                       }))(obj)).Pos)[local61]
+                       write16(w, uint16(x))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos [3]int16
+                       Node
+                       KeepMeta bool
+               }))(obj)).Node).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Node", err))
+       }
+       {
+               x := (*(*(struct {
+                       Pos [3]int16
+                       Node
+                       KeepMeta bool
+               }))(obj)).KeepMeta
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+}
+
+func (obj *ToCltAddNode) deserialize(r io.Reader) {
+       for local62 := range (*(*(struct {
+               Pos [3]int16
+               Node
+               KeepMeta bool
+       }))(obj)).Pos {
+               {
+                       p := &((*(*(struct {
+                               Pos [3]int16
+                               Node
+                               KeepMeta bool
+                       }))(obj)).Pos)[local62]
+                       *p = int16(read16(r))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos [3]int16
+                       Node
+                       KeepMeta bool
+               }))(obj)).Node).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Node", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Pos [3]int16
+                       Node
+                       KeepMeta bool
+               }))(obj)).KeepMeta
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+}
+
+func (obj *ToCltRemoveNode) serialize(w io.Writer) {
+       for local63 := range (*(*(struct {
+               Pos [3]int16
+       }))(obj)).Pos {
+               {
+                       x := ((*(*(struct {
+                               Pos [3]int16
+                       }))(obj)).Pos)[local63]
+                       write16(w, uint16(x))
+               }
+       }
+}
+
+func (obj *ToCltRemoveNode) deserialize(r io.Reader) {
+       for local64 := range (*(*(struct {
+               Pos [3]int16
+       }))(obj)).Pos {
+               {
+                       p := &((*(*(struct {
+                               Pos [3]int16
+                       }))(obj)).Pos)[local64]
+                       *p = int16(read16(r))
+               }
+       }
+}
+
+func (obj *ToCltInv) serialize(w io.Writer) {
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       //mt:raw
+                       Inv string
+               }))(obj)).Inv))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltInv) deserialize(r io.Reader) {
+       var local65 []uint8
+       for {
+               var local66 uint8
+               err := pcall(func() {
+                       {
+                               p := &local66
+                               *p = read8(r)
+                       }
+               })
+               if err == io.EOF {
+                       break
+               }
+               (local65) = append((local65), local66)
+               chk(err)
+       }
+       ((*(*(struct {
+               //mt:raw
+               Inv string
+       }))(obj)).Inv) = string(local65)
+}
+
+func (obj *ToCltTimeOfDay) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Time  uint16  // %24000
+                       Speed float32 // Speed times faster than real time
+               }))(obj)).Time
+               write16(w, uint16(x))
+       }
+       {
+               x := (*(*(struct {
+                       Time  uint16  // %24000
+                       Speed float32 // Speed times faster than real time
+               }))(obj)).Speed
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *ToCltTimeOfDay) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Time  uint16  // %24000
+                       Speed float32 // Speed times faster than real time
+               }))(obj)).Time
+               *p = read16(r)
+       }
+       {
+               p := &(*(*(struct {
+                       Time  uint16  // %24000
+                       Speed float32 // Speed times faster than real time
+               }))(obj)).Speed
+               *p = math.Float32frombits(read32(r))
+       }
+}
+
+func (obj *ToCltCSMRestrictionFlags) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Flags CSMRestrictionFlags
+
+                       // MapRange is the maximum distance from the player CSMs can read the map
+                       // if Flags&LimitMapRange != 0.
+                       MapRange uint32
+               }))(obj)).Flags).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.CSMRestrictionFlags", err))
+       }
+       {
+               x := (*(*(struct {
+                       Flags CSMRestrictionFlags
+
+                       // MapRange is the maximum distance from the player CSMs can read the map
+                       // if Flags&LimitMapRange != 0.
+                       MapRange uint32
+               }))(obj)).MapRange
+               write32(w, uint32(x))
+       }
+}
+
+func (obj *ToCltCSMRestrictionFlags) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Flags CSMRestrictionFlags
+
+                       // MapRange is the maximum distance from the player CSMs can read the map
+                       // if Flags&LimitMapRange != 0.
+                       MapRange uint32
+               }))(obj)).Flags).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.CSMRestrictionFlags", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Flags CSMRestrictionFlags
+
+                       // MapRange is the maximum distance from the player CSMs can read the map
+                       // if Flags&LimitMapRange != 0.
+                       MapRange uint32
+               }))(obj)).MapRange
+               *p = read32(r)
+       }
+}
+
+func (obj *ToCltAddPlayerVel) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Vel Vec
+               }))(obj)).Vel).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+}
+
+func (obj *ToCltAddPlayerVel) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Vel Vec
+               }))(obj)).Vel).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+}
+
+func (obj *ToCltMediaPush) serialize(w io.Writer) {
+       {
+               local67 := uint16(sha1.Size)
+               {
+                       x := local67
+                       write16(w, uint16(x))
+               }
+       }
+       {
+               _, err := w.Write(((*(*(struct {
+                       //mt:const uint16(sha1.Size)
+                       SHA1        [sha1.Size]byte
+                       Filename    string
+                       ShouldCache bool
+
+                       //mt:len32
+                       Data []byte
+               }))(obj)).SHA1)[:])
+               chk(err)
+       }
+       if len(([]byte((*(*(struct {
+               //mt:const uint16(sha1.Size)
+               SHA1        [sha1.Size]byte
+               Filename    string
+               ShouldCache bool
+
+               //mt:len32
+               Data []byte
+       }))(obj)).Filename))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       //mt:const uint16(sha1.Size)
+                       SHA1        [sha1.Size]byte
+                       Filename    string
+                       ShouldCache bool
+
+                       //mt:len32
+                       Data []byte
+               }))(obj)).Filename))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       //mt:const uint16(sha1.Size)
+                       SHA1        [sha1.Size]byte
+                       Filename    string
+                       ShouldCache bool
+
+                       //mt:len32
+                       Data []byte
+               }))(obj)).Filename))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       //mt:const uint16(sha1.Size)
+                       SHA1        [sha1.Size]byte
+                       Filename    string
+                       ShouldCache bool
+
+                       //mt:len32
+                       Data []byte
+               }))(obj)).ShouldCache
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if len(((*(*(struct {
+               //mt:const uint16(sha1.Size)
+               SHA1        [sha1.Size]byte
+               Filename    string
+               ShouldCache bool
+
+               //mt:len32
+               Data []byte
+       }))(obj)).Data)) > math.MaxUint32 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint32(len(((*(*(struct {
+                       //mt:const uint16(sha1.Size)
+                       SHA1        [sha1.Size]byte
+                       Filename    string
+                       ShouldCache bool
+
+                       //mt:len32
+                       Data []byte
+               }))(obj)).Data)))
+               write32(w, uint32(x))
+       }
+       {
+               _, err := w.Write(((*(*(struct {
+                       //mt:const uint16(sha1.Size)
+                       SHA1        [sha1.Size]byte
+                       Filename    string
+                       ShouldCache bool
+
+                       //mt:len32
+                       Data []byte
+               }))(obj)).Data)[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltMediaPush) deserialize(r io.Reader) {
+       {
+               var local68 uint16
+               {
+                       p := &local68
+                       *p = read16(r)
+               }
+               if local68 != (20) {
+                       chk(fmt.Errorf("const %v: %v", 20, local68))
+               }
+       }
+       {
+               _, err := io.ReadFull(r, ((*(*(struct {
+                       //mt:const uint16(sha1.Size)
+                       SHA1        [sha1.Size]byte
+                       Filename    string
+                       ShouldCache bool
+
+                       //mt:len32
+                       Data []byte
+               }))(obj)).SHA1)[:])
+               chk(err)
+       }
+       var local69 []uint8
+       var local70 uint16
+       {
+               p := &local70
+               *p = read16(r)
+       }
+       (local69) = make([]uint8, local70)
+       {
+               _, err := io.ReadFull(r, (local69)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               //mt:const uint16(sha1.Size)
+               SHA1        [sha1.Size]byte
+               Filename    string
+               ShouldCache bool
+
+               //mt:len32
+               Data []byte
+       }))(obj)).Filename) = string(local69)
+       {
+               p := &(*(*(struct {
+                       //mt:const uint16(sha1.Size)
+                       SHA1        [sha1.Size]byte
+                       Filename    string
+                       ShouldCache bool
+
+                       //mt:len32
+                       Data []byte
+               }))(obj)).ShouldCache
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       var local71 uint32
+       {
+               p := &local71
+               *p = read32(r)
+       }
+       ((*(*(struct {
+               //mt:const uint16(sha1.Size)
+               SHA1        [sha1.Size]byte
+               Filename    string
+               ShouldCache bool
+
+               //mt:len32
+               Data []byte
+       }))(obj)).Data) = make([]byte, local71)
+       {
+               _, err := io.ReadFull(r, ((*(*(struct {
+                       //mt:const uint16(sha1.Size)
+                       SHA1        [sha1.Size]byte
+                       Filename    string
+                       ShouldCache bool
+
+                       //mt:len32
+                       Data []byte
+               }))(obj)).Data)[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltChatMsg) serialize(w io.Writer) {
+       {
+               local72 := uint8(1)
+               {
+                       x := local72
+                       write8(w, uint8(x))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Type ChatMsgType
+
+                       //mt:utf16
+                       Sender, Text string
+
+                       Timestamp int64 // Unix time.
+               }))(obj)).Type).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ChatMsgType", err))
+       }
+       if len((utf16.Encode([]rune((*(*(struct {
+               Type ChatMsgType
+
+               //mt:utf16
+               Sender, Text string
+
+               Timestamp int64 // Unix time.
+       }))(obj)).Sender)))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len((utf16.Encode([]rune((*(*(struct {
+                       Type ChatMsgType
+
+                       //mt:utf16
+                       Sender, Text string
+
+                       Timestamp int64 // Unix time.
+               }))(obj)).Sender)))))
+               write16(w, uint16(x))
+       }
+       for local73 := range utf16.Encode([]rune((*(*(struct {
+               Type ChatMsgType
+
+               //mt:utf16
+               Sender, Text string
+
+               Timestamp int64 // Unix time.
+       }))(obj)).Sender)) {
+               {
+                       x := (utf16.Encode([]rune((*(*(struct {
+                               Type ChatMsgType
+
+                               //mt:utf16
+                               Sender, Text string
+
+                               Timestamp int64 // Unix time.
+                       }))(obj)).Sender)))[local73]
+                       write16(w, uint16(x))
+               }
+       }
+       if len((utf16.Encode([]rune((*(*(struct {
+               Type ChatMsgType
+
+               //mt:utf16
+               Sender, Text string
+
+               Timestamp int64 // Unix time.
+       }))(obj)).Text)))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len((utf16.Encode([]rune((*(*(struct {
+                       Type ChatMsgType
+
+                       //mt:utf16
+                       Sender, Text string
+
+                       Timestamp int64 // Unix time.
+               }))(obj)).Text)))))
+               write16(w, uint16(x))
+       }
+       for local74 := range utf16.Encode([]rune((*(*(struct {
+               Type ChatMsgType
+
+               //mt:utf16
+               Sender, Text string
+
+               Timestamp int64 // Unix time.
+       }))(obj)).Text)) {
+               {
+                       x := (utf16.Encode([]rune((*(*(struct {
+                               Type ChatMsgType
+
+                               //mt:utf16
+                               Sender, Text string
+
+                               Timestamp int64 // Unix time.
+                       }))(obj)).Text)))[local74]
+                       write16(w, uint16(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Type ChatMsgType
+
+                       //mt:utf16
+                       Sender, Text string
+
+                       Timestamp int64 // Unix time.
+               }))(obj)).Timestamp
+               write64(w, uint64(x))
+       }
+}
+
+func (obj *ToCltChatMsg) deserialize(r io.Reader) {
+       {
+               var local75 uint8
+               {
+                       p := &local75
+                       *p = read8(r)
+               }
+               if local75 != (1) {
+                       chk(fmt.Errorf("const %v: %v", 1, local75))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Type ChatMsgType
+
+                       //mt:utf16
+                       Sender, Text string
+
+                       Timestamp int64 // Unix time.
+               }))(obj)).Type).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ChatMsgType", err))
+       }
+       var local76 []uint16
+       var local77 uint16
+       {
+               p := &local77
+               *p = read16(r)
+       }
+       (local76) = make([]uint16, local77)
+       for local78 := range local76 {
+               {
+                       p := &(local76)[local78]
+                       *p = read16(r)
+               }
+       }
+       (*(*(struct {
+               Type ChatMsgType
+
+               //mt:utf16
+               Sender, Text string
+
+               Timestamp int64 // Unix time.
+       }))(obj)).Sender = string(utf16.Decode(local76))
+       var local79 []uint16
+       var local80 uint16
+       {
+               p := &local80
+               *p = read16(r)
+       }
+       (local79) = make([]uint16, local80)
+       for local81 := range local79 {
+               {
+                       p := &(local79)[local81]
+                       *p = read16(r)
+               }
+       }
+       (*(*(struct {
+               Type ChatMsgType
+
+               //mt:utf16
+               Sender, Text string
+
+               Timestamp int64 // Unix time.
+       }))(obj)).Text = string(utf16.Decode(local79))
+       {
+               p := &(*(*(struct {
+                       Type ChatMsgType
+
+                       //mt:utf16
+                       Sender, Text string
+
+                       Timestamp int64 // Unix time.
+               }))(obj)).Timestamp
+               *p = int64(read64(r))
+       }
+}
+
+func (obj *ToCltAORmAdd) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               Remove []AOID
+               Add    []struct {
+                       ID AOID
+                       //mt:const genericCAO
+                       //mt:lenhdr 32
+                       InitData AOInitData
+               }
+       }))(obj)).Remove)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Remove []AOID
+                       Add    []struct {
+                               ID AOID
+                               //mt:const genericCAO
+                               //mt:lenhdr 32
+                               InitData AOInitData
+                       }
+               }))(obj)).Remove)))
+               write16(w, uint16(x))
+       }
+       for local82 := range (*(*(struct {
+               Remove []AOID
+               Add    []struct {
+                       ID AOID
+                       //mt:const genericCAO
+                       //mt:lenhdr 32
+                       InitData AOInitData
+               }
+       }))(obj)).Remove {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Remove []AOID
+                               Add    []struct {
+                                       ID AOID
+                                       //mt:const genericCAO
+                                       //mt:lenhdr 32
+                                       InitData AOInitData
+                               }
+                       }))(obj)).Remove)[local82]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+               }
+       }
+       if len(((*(*(struct {
+               Remove []AOID
+               Add    []struct {
+                       ID AOID
+                       //mt:const genericCAO
+                       //mt:lenhdr 32
+                       InitData AOInitData
+               }
+       }))(obj)).Add)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Remove []AOID
+                       Add    []struct {
+                               ID AOID
+                               //mt:const genericCAO
+                               //mt:lenhdr 32
+                               InitData AOInitData
+                       }
+               }))(obj)).Add)))
+               write16(w, uint16(x))
+       }
+       for local83 := range (*(*(struct {
+               Remove []AOID
+               Add    []struct {
+                       ID AOID
+                       //mt:const genericCAO
+                       //mt:lenhdr 32
+                       InitData AOInitData
+               }
+       }))(obj)).Add {
+               if err := pcall(func() {
+                       ((((*(*(struct {
+                               Remove []AOID
+                               Add    []struct {
+                                       ID AOID
+                                       //mt:const genericCAO
+                                       //mt:lenhdr 32
+                                       InitData AOInitData
+                               }
+                       }))(obj)).Add)[local83]).ID).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+               }
+               {
+                       local84 := genericCAO
+                       if err := pcall(func() {
+                               (local84).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.aoType", err))
+                       }
+               }
+               {
+                       ow := w
+                       w := new(bytes.Buffer)
+                       if err := pcall(func() {
+                               ((((*(*(struct {
+                                       Remove []AOID
+                                       Add    []struct {
+                                               ID AOID
+                                               //mt:const genericCAO
+                                               //mt:lenhdr 32
+                                               InitData AOInitData
+                                       }
+                               }))(obj)).Add)[local83]).InitData).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOInitData", err))
+                       }
+                       {
+                               buf := w
+                               w := ow
+                               if len((buf.Bytes())) > math.MaxUint32 {
+                                       chk(ErrTooLong)
+                               }
+                               {
+                                       x := uint32(len((buf.Bytes())))
+                                       write32(w, uint32(x))
+                               }
+                               {
+                                       _, err := w.Write((buf.Bytes())[:])
+                                       chk(err)
+                               }
+                       }
+               }
+       }
+}
+
+func (obj *ToCltAORmAdd) deserialize(r io.Reader) {
+       var local85 uint16
+       {
+               p := &local85
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Remove []AOID
+               Add    []struct {
+                       ID AOID
+                       //mt:const genericCAO
+                       //mt:lenhdr 32
+                       InitData AOInitData
+               }
+       }))(obj)).Remove) = make([]AOID, local85)
+       for local86 := range (*(*(struct {
+               Remove []AOID
+               Add    []struct {
+                       ID AOID
+                       //mt:const genericCAO
+                       //mt:lenhdr 32
+                       InitData AOInitData
+               }
+       }))(obj)).Remove {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Remove []AOID
+                               Add    []struct {
+                                       ID AOID
+                                       //mt:const genericCAO
+                                       //mt:lenhdr 32
+                                       InitData AOInitData
+                               }
+                       }))(obj)).Remove)[local86]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+               }
+       }
+       var local87 uint16
+       {
+               p := &local87
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Remove []AOID
+               Add    []struct {
+                       ID AOID
+                       //mt:const genericCAO
+                       //mt:lenhdr 32
+                       InitData AOInitData
+               }
+       }))(obj)).Add) = make([]struct {
+               ID       AOID
+               InitData AOInitData
+       }, local87)
+       for local88 := range (*(*(struct {
+               Remove []AOID
+               Add    []struct {
+                       ID AOID
+                       //mt:const genericCAO
+                       //mt:lenhdr 32
+                       InitData AOInitData
+               }
+       }))(obj)).Add {
+               if err := pcall(func() {
+                       ((((*(*(struct {
+                               Remove []AOID
+                               Add    []struct {
+                                       ID AOID
+                                       //mt:const genericCAO
+                                       //mt:lenhdr 32
+                                       InitData AOInitData
+                               }
+                       }))(obj)).Add)[local88]).ID).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+               }
+               {
+                       var local89 aoType
+                       if err := pcall(func() {
+                               (local89).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.aoType", err))
+                       }
+                       if local89 != (101) {
+                               chk(fmt.Errorf("const %v: %v", 101, local89))
+                       }
+               }
+               {
+                       var n uint32
+                       {
+                               p := &n
+                               *p = read32(r)
+                       }
+                       r := &io.LimitedReader{r, int64(n)}
+                       if err := pcall(func() {
+                               ((((*(*(struct {
+                                       Remove []AOID
+                                       Add    []struct {
+                                               ID AOID
+                                               //mt:const genericCAO
+                                               //mt:lenhdr 32
+                                               InitData AOInitData
+                                       }
+                               }))(obj)).Add)[local88]).InitData).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOInitData", err))
+                       }
+                       if r.N > 0 {
+                               chk(fmt.Errorf("%d bytes of trailing data", r.N))
+                       }
+               }
+       }
+}
+
+func (obj *ToCltAOMsgs) serialize(w io.Writer) {
+       for local90 := range (*(*(struct {
+               //mt:raw
+               Msgs []IDAOMsg
+       }))(obj)).Msgs {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               //mt:raw
+                               Msgs []IDAOMsg
+                       }))(obj)).Msgs)[local90]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.IDAOMsg", err))
+               }
+       }
+}
+
+func (obj *ToCltAOMsgs) deserialize(r io.Reader) {
+       for {
+               var local91 IDAOMsg
+               err := pcall(func() {
+                       if err := pcall(func() {
+                               (local91).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.IDAOMsg", err))
+                       }
+               })
+               if err == io.EOF {
+                       break
+               }
+               ((*(*(struct {
+                       //mt:raw
+                       Msgs []IDAOMsg
+               }))(obj)).Msgs) = append(((*(*(struct {
+                       //mt:raw
+                       Msgs []IDAOMsg
+               }))(obj)).Msgs), local91)
+               chk(err)
+       }
+}
+
+func (obj *ToCltHP) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       HP uint16
+               }))(obj)).HP
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *ToCltHP) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       HP uint16
+               }))(obj)).HP
+               *p = read16(r)
+       }
+}
+
+func (obj *ToCltMovePlayer) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos
+                       Pitch, Yaw float32
+               }))(obj)).Pos).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+       {
+               x := (*(*(struct {
+                       Pos
+                       Pitch, Yaw float32
+               }))(obj)).Pitch
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Pos
+                       Pitch, Yaw float32
+               }))(obj)).Yaw
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *ToCltMovePlayer) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos
+                       Pitch, Yaw float32
+               }))(obj)).Pos).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Pos
+                       Pitch, Yaw float32
+               }))(obj)).Pitch
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Pos
+                       Pitch, Yaw float32
+               }))(obj)).Yaw
+               *p = math.Float32frombits(read32(r))
+       }
+}
+
+func (obj *ToCltDiscoLegacy) serialize(w io.Writer) {
+       if len((utf16.Encode([]rune((*(*(struct {
+               //mt:utf16
+               Reason string
+       }))(obj)).Reason)))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len((utf16.Encode([]rune((*(*(struct {
+                       //mt:utf16
+                       Reason string
+               }))(obj)).Reason)))))
+               write16(w, uint16(x))
+       }
+       for local92 := range utf16.Encode([]rune((*(*(struct {
+               //mt:utf16
+               Reason string
+       }))(obj)).Reason)) {
+               {
+                       x := (utf16.Encode([]rune((*(*(struct {
+                               //mt:utf16
+                               Reason string
+                       }))(obj)).Reason)))[local92]
+                       write16(w, uint16(x))
+               }
+       }
+}
+
+func (obj *ToCltDiscoLegacy) deserialize(r io.Reader) {
+       var local93 []uint16
+       var local94 uint16
+       {
+               p := &local94
+               *p = read16(r)
+       }
+       (local93) = make([]uint16, local94)
+       for local95 := range local93 {
+               {
+                       p := &(local93)[local95]
+                       *p = read16(r)
+               }
+       }
+       (*(*(struct {
+               //mt:utf16
+               Reason string
+       }))(obj)).Reason = string(utf16.Decode(local93))
+}
+
+func (obj *ToCltFOV) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       FOV            float32
+                       Multiplier     bool
+                       TransitionTime float32
+               }))(obj)).FOV
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       FOV            float32
+                       Multiplier     bool
+                       TransitionTime float32
+               }))(obj)).Multiplier
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       FOV            float32
+                       Multiplier     bool
+                       TransitionTime float32
+               }))(obj)).TransitionTime
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *ToCltFOV) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       FOV            float32
+                       Multiplier     bool
+                       TransitionTime float32
+               }))(obj)).FOV
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       FOV            float32
+                       Multiplier     bool
+                       TransitionTime float32
+               }))(obj)).Multiplier
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       FOV            float32
+                       Multiplier     bool
+                       TransitionTime float32
+               }))(obj)).TransitionTime
+               *p = math.Float32frombits(read32(r))
+       }
+}
+
+func (obj *ToCltDeathScreen) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       PointCam bool
+                       PointAt  Pos
+               }))(obj)).PointCam
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       PointCam bool
+                       PointAt  Pos
+               }))(obj)).PointAt).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+}
+
+func (obj *ToCltDeathScreen) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       PointCam bool
+                       PointAt  Pos
+               }))(obj)).PointCam
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       PointCam bool
+                       PointAt  Pos
+               }))(obj)).PointAt).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+}
+
+func (obj *ToCltMedia) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       // N is the total number of ToCltMedia packets.
+                       // I is the index of this packet.
+                       N, I uint16
+
+                       //mt:len32
+                       Files []struct {
+                               Name string
+
+                               //mt:len32
+                               Data []byte
+                       }
+               }))(obj)).N
+               write16(w, uint16(x))
+       }
+       {
+               x := (*(*(struct {
+                       // N is the total number of ToCltMedia packets.
+                       // I is the index of this packet.
+                       N, I uint16
+
+                       //mt:len32
+                       Files []struct {
+                               Name string
+
+                               //mt:len32
+                               Data []byte
+                       }
+               }))(obj)).I
+               write16(w, uint16(x))
+       }
+       if len(((*(*(struct {
+               // N is the total number of ToCltMedia packets.
+               // I is the index of this packet.
+               N, I uint16
+
+               //mt:len32
+               Files []struct {
+                       Name string
+
+                       //mt:len32
+                       Data []byte
+               }
+       }))(obj)).Files)) > math.MaxUint32 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint32(len(((*(*(struct {
+                       // N is the total number of ToCltMedia packets.
+                       // I is the index of this packet.
+                       N, I uint16
+
+                       //mt:len32
+                       Files []struct {
+                               Name string
+
+                               //mt:len32
+                               Data []byte
+                       }
+               }))(obj)).Files)))
+               write32(w, uint32(x))
+       }
+       for local96 := range (*(*(struct {
+               // N is the total number of ToCltMedia packets.
+               // I is the index of this packet.
+               N, I uint16
+
+               //mt:len32
+               Files []struct {
+                       Name string
+
+                       //mt:len32
+                       Data []byte
+               }
+       }))(obj)).Files {
+               if len(([]byte((((*(*(struct {
+                       // N is the total number of ToCltMedia packets.
+                       // I is the index of this packet.
+                       N, I uint16
+
+                       //mt:len32
+                       Files []struct {
+                               Name string
+
+                               //mt:len32
+                               Data []byte
+                       }
+               }))(obj)).Files)[local96]).Name))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((((*(*(struct {
+                               // N is the total number of ToCltMedia packets.
+                               // I is the index of this packet.
+                               N, I uint16
+
+                               //mt:len32
+                               Files []struct {
+                                       Name string
+
+                                       //mt:len32
+                                       Data []byte
+                               }
+                       }))(obj)).Files)[local96]).Name))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((((*(*(struct {
+                               // N is the total number of ToCltMedia packets.
+                               // I is the index of this packet.
+                               N, I uint16
+
+                               //mt:len32
+                               Files []struct {
+                                       Name string
+
+                                       //mt:len32
+                                       Data []byte
+                               }
+                       }))(obj)).Files)[local96]).Name))[:])
+                       chk(err)
+               }
+               if len(((((*(*(struct {
+                       // N is the total number of ToCltMedia packets.
+                       // I is the index of this packet.
+                       N, I uint16
+
+                       //mt:len32
+                       Files []struct {
+                               Name string
+
+                               //mt:len32
+                               Data []byte
+                       }
+               }))(obj)).Files)[local96]).Data)) > math.MaxUint32 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint32(len(((((*(*(struct {
+                               // N is the total number of ToCltMedia packets.
+                               // I is the index of this packet.
+                               N, I uint16
+
+                               //mt:len32
+                               Files []struct {
+                                       Name string
+
+                                       //mt:len32
+                                       Data []byte
+                               }
+                       }))(obj)).Files)[local96]).Data)))
+                       write32(w, uint32(x))
+               }
+               {
+                       _, err := w.Write(((((*(*(struct {
+                               // N is the total number of ToCltMedia packets.
+                               // I is the index of this packet.
+                               N, I uint16
+
+                               //mt:len32
+                               Files []struct {
+                                       Name string
+
+                                       //mt:len32
+                                       Data []byte
+                               }
+                       }))(obj)).Files)[local96]).Data)[:])
+                       chk(err)
+               }
+       }
+}
+
+func (obj *ToCltMedia) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       // N is the total number of ToCltMedia packets.
+                       // I is the index of this packet.
+                       N, I uint16
+
+                       //mt:len32
+                       Files []struct {
+                               Name string
+
+                               //mt:len32
+                               Data []byte
+                       }
+               }))(obj)).N
+               *p = read16(r)
+       }
+       {
+               p := &(*(*(struct {
+                       // N is the total number of ToCltMedia packets.
+                       // I is the index of this packet.
+                       N, I uint16
+
+                       //mt:len32
+                       Files []struct {
+                               Name string
+
+                               //mt:len32
+                               Data []byte
+                       }
+               }))(obj)).I
+               *p = read16(r)
+       }
+       var local97 uint32
+       {
+               p := &local97
+               *p = read32(r)
+       }
+       ((*(*(struct {
+               // N is the total number of ToCltMedia packets.
+               // I is the index of this packet.
+               N, I uint16
+
+               //mt:len32
+               Files []struct {
+                       Name string
+
+                       //mt:len32
+                       Data []byte
+               }
+       }))(obj)).Files) = make([]struct {
+               Name string
+               Data []byte
+       }, local97)
+       for local98 := range (*(*(struct {
+               // N is the total number of ToCltMedia packets.
+               // I is the index of this packet.
+               N, I uint16
+
+               //mt:len32
+               Files []struct {
+                       Name string
+
+                       //mt:len32
+                       Data []byte
+               }
+       }))(obj)).Files {
+               var local99 []uint8
+               var local100 uint16
+               {
+                       p := &local100
+                       *p = read16(r)
+               }
+               (local99) = make([]uint8, local100)
+               {
+                       _, err := io.ReadFull(r, (local99)[:])
+                       chk(err)
+               }
+               ((((*(*(struct {
+                       // N is the total number of ToCltMedia packets.
+                       // I is the index of this packet.
+                       N, I uint16
+
+                       //mt:len32
+                       Files []struct {
+                               Name string
+
+                               //mt:len32
+                               Data []byte
+                       }
+               }))(obj)).Files)[local98]).Name) = string(local99)
+               var local101 uint32
+               {
+                       p := &local101
+                       *p = read32(r)
+               }
+               ((((*(*(struct {
+                       // N is the total number of ToCltMedia packets.
+                       // I is the index of this packet.
+                       N, I uint16
+
+                       //mt:len32
+                       Files []struct {
+                               Name string
+
+                               //mt:len32
+                               Data []byte
+                       }
+               }))(obj)).Files)[local98]).Data) = make([]byte, local101)
+               {
+                       _, err := io.ReadFull(r, ((((*(*(struct {
+                               // N is the total number of ToCltMedia packets.
+                               // I is the index of this packet.
+                               N, I uint16
+
+                               //mt:len32
+                               Files []struct {
+                                       Name string
+
+                                       //mt:len32
+                                       Data []byte
+                               }
+                       }))(obj)).Files)[local98]).Data)[:])
+                       chk(err)
+               }
+       }
+}
+
+func (obj *ToCltNodeDefs) serialize(w io.Writer) {
+       {
+               ow := w
+               w := new(bytes.Buffer)
+               {
+                       w := zlib.NewWriter(w)
+                       {
+                               local102 := uint8(1)
+                               {
+                                       x := local102
+                                       write8(w, uint8(x))
+                               }
+                       }
+                       {
+                               x := (*(*(struct {
+
+                                       // See (de)serialize.fmt.
+                                       Defs []NodeDef
+                               }))(obj)).Defs
+                               { // For ToCltNodeDefs.Defs
+                                       if len(x) > math.MaxUint16 {
+                                               chk(ErrTooLong)
+                                       }
+                                       write16(w, uint16(len(x)))
+                                       var b bytes.Buffer
+                                       for i := range x {
+                                               x[i].serialize(&b)
+                                       }
+                                       if b.Len() > math.MaxUint32 {
+                                               chk(ErrTooLong)
+                                       }
+                                       write32(w, uint32(b.Len()))
+                                       _, err := b.WriteTo(w)
+                                       chk(err)
+                               }
+                       }
+                       chk(w.Close())
+               }
+               {
+                       buf := w
+                       w := ow
+                       if len((buf.Bytes())) > math.MaxUint32 {
+                               chk(ErrTooLong)
+                       }
+                       {
+                               x := uint32(len((buf.Bytes())))
+                               write32(w, uint32(x))
+                       }
+                       {
+                               _, err := w.Write((buf.Bytes())[:])
+                               chk(err)
+                       }
+               }
+       }
+}
+
+func (obj *ToCltNodeDefs) deserialize(r io.Reader) {
+       {
+               var n uint32
+               {
+                       p := &n
+                       *p = read32(r)
+               }
+               r := &io.LimitedReader{r, int64(n)}
+               {
+                       r, err := zlib.NewReader(byteReader{r})
+                       chk(err)
+                       {
+                               var local103 uint8
+                               {
+                                       p := &local103
+                                       *p = read8(r)
+                               }
+                               if local103 != (1) {
+                                       chk(fmt.Errorf("const %v: %v", 1, local103))
+                               }
+                       }
+                       {
+                               p := &(*(*(struct {
+
+                                       // See (de)serialize.fmt.
+                                       Defs []NodeDef
+                               }))(obj)).Defs
+                               { // For ToCltNodeDefs.Defs.
+                                       *p = make([]NodeDef, read16(r))
+                                       r := &io.LimitedReader{r, int64(read32(r))}
+                                       for i := range *p {
+                                               (*p)[i].deserialize(r)
+                                       }
+                                       if r.N > 0 {
+                                               chk(fmt.Errorf("%d bytes of trailing data", r.N))
+                                       }
+                               }
+                       }
+                       chk(r.Close())
+               }
+               if r.N > 0 {
+                       chk(fmt.Errorf("%d bytes of trailing data", r.N))
+               }
+       }
+}
+
+func (obj *ToCltAnnounceMedia) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               Files []struct {
+                       Name       string
+                       Base64SHA1 string
+               }
+               URL string
+       }))(obj)).Files)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Files []struct {
+                               Name       string
+                               Base64SHA1 string
+                       }
+                       URL string
+               }))(obj)).Files)))
+               write16(w, uint16(x))
+       }
+       for local104 := range (*(*(struct {
+               Files []struct {
+                       Name       string
+                       Base64SHA1 string
+               }
+               URL string
+       }))(obj)).Files {
+               if len(([]byte((((*(*(struct {
+                       Files []struct {
+                               Name       string
+                               Base64SHA1 string
+                       }
+                       URL string
+               }))(obj)).Files)[local104]).Name))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((((*(*(struct {
+                               Files []struct {
+                                       Name       string
+                                       Base64SHA1 string
+                               }
+                               URL string
+                       }))(obj)).Files)[local104]).Name))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((((*(*(struct {
+                               Files []struct {
+                                       Name       string
+                                       Base64SHA1 string
+                               }
+                               URL string
+                       }))(obj)).Files)[local104]).Name))[:])
+                       chk(err)
+               }
+               if len(([]byte((((*(*(struct {
+                       Files []struct {
+                               Name       string
+                               Base64SHA1 string
+                       }
+                       URL string
+               }))(obj)).Files)[local104]).Base64SHA1))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((((*(*(struct {
+                               Files []struct {
+                                       Name       string
+                                       Base64SHA1 string
+                               }
+                               URL string
+                       }))(obj)).Files)[local104]).Base64SHA1))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((((*(*(struct {
+                               Files []struct {
+                                       Name       string
+                                       Base64SHA1 string
+                               }
+                               URL string
+                       }))(obj)).Files)[local104]).Base64SHA1))[:])
+                       chk(err)
+               }
+       }
+       if len(([]byte((*(*(struct {
+               Files []struct {
+                       Name       string
+                       Base64SHA1 string
+               }
+               URL string
+       }))(obj)).URL))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Files []struct {
+                               Name       string
+                               Base64SHA1 string
+                       }
+                       URL string
+               }))(obj)).URL))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Files []struct {
+                               Name       string
+                               Base64SHA1 string
+                       }
+                       URL string
+               }))(obj)).URL))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltAnnounceMedia) deserialize(r io.Reader) {
+       var local105 uint16
+       {
+               p := &local105
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Files []struct {
+                       Name       string
+                       Base64SHA1 string
+               }
+               URL string
+       }))(obj)).Files) = make([]struct {
+               Name       string
+               Base64SHA1 string
+       }, local105)
+       for local106 := range (*(*(struct {
+               Files []struct {
+                       Name       string
+                       Base64SHA1 string
+               }
+               URL string
+       }))(obj)).Files {
+               var local107 []uint8
+               var local108 uint16
+               {
+                       p := &local108
+                       *p = read16(r)
+               }
+               (local107) = make([]uint8, local108)
+               {
+                       _, err := io.ReadFull(r, (local107)[:])
+                       chk(err)
+               }
+               ((((*(*(struct {
+                       Files []struct {
+                               Name       string
+                               Base64SHA1 string
+                       }
+                       URL string
+               }))(obj)).Files)[local106]).Name) = string(local107)
+               var local109 []uint8
+               var local110 uint16
+               {
+                       p := &local110
+                       *p = read16(r)
+               }
+               (local109) = make([]uint8, local110)
+               {
+                       _, err := io.ReadFull(r, (local109)[:])
+                       chk(err)
+               }
+               ((((*(*(struct {
+                       Files []struct {
+                               Name       string
+                               Base64SHA1 string
+                       }
+                       URL string
+               }))(obj)).Files)[local106]).Base64SHA1) = string(local109)
+       }
+       var local111 []uint8
+       var local112 uint16
+       {
+               p := &local112
+               *p = read16(r)
+       }
+       (local111) = make([]uint8, local112)
+       {
+               _, err := io.ReadFull(r, (local111)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Files []struct {
+                       Name       string
+                       Base64SHA1 string
+               }
+               URL string
+       }))(obj)).URL) = string(local111)
+}
+
+func (obj *ToCltItemDefs) serialize(w io.Writer) {
+       {
+               ow := w
+               w := new(bytes.Buffer)
+               {
+                       w := zlib.NewWriter(w)
+                       {
+                               local113 := uint8(0)
+                               {
+                                       x := local113
+                                       write8(w, uint8(x))
+                               }
+                       }
+                       if len(((*(*(struct {
+                               Defs    []ItemDef
+                               Aliases []struct{ Alias, Orig string }
+                       }))(obj)).Defs)) > math.MaxUint16 {
+                               chk(ErrTooLong)
+                       }
+                       {
+                               x := uint16(len(((*(*(struct {
+                                       Defs    []ItemDef
+                                       Aliases []struct{ Alias, Orig string }
+                               }))(obj)).Defs)))
+                               write16(w, uint16(x))
+                       }
+                       for local114 := range (*(*(struct {
+                               Defs    []ItemDef
+                               Aliases []struct{ Alias, Orig string }
+                       }))(obj)).Defs {
+                               if err := pcall(func() {
+                                       (((*(*(struct {
+                                               Defs    []ItemDef
+                                               Aliases []struct{ Alias, Orig string }
+                                       }))(obj)).Defs)[local114]).serialize(w)
+                               }); err != nil {
+                                       if err == io.EOF {
+                                               chk(io.EOF)
+                                       }
+                                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ItemDef", err))
+                               }
+                       }
+                       if len(((*(*(struct {
+                               Defs    []ItemDef
+                               Aliases []struct{ Alias, Orig string }
+                       }))(obj)).Aliases)) > math.MaxUint16 {
+                               chk(ErrTooLong)
+                       }
+                       {
+                               x := uint16(len(((*(*(struct {
+                                       Defs    []ItemDef
+                                       Aliases []struct{ Alias, Orig string }
+                               }))(obj)).Aliases)))
+                               write16(w, uint16(x))
+                       }
+                       for local115 := range (*(*(struct {
+                               Defs    []ItemDef
+                               Aliases []struct{ Alias, Orig string }
+                       }))(obj)).Aliases {
+                               if len(([]byte((((*(*(struct {
+                                       Defs    []ItemDef
+                                       Aliases []struct{ Alias, Orig string }
+                               }))(obj)).Aliases)[local115]).Alias))) > math.MaxUint16 {
+                                       chk(ErrTooLong)
+                               }
+                               {
+                                       x := uint16(len(([]byte((((*(*(struct {
+                                               Defs    []ItemDef
+                                               Aliases []struct{ Alias, Orig string }
+                                       }))(obj)).Aliases)[local115]).Alias))))
+                                       write16(w, uint16(x))
+                               }
+                               {
+                                       _, err := w.Write(([]byte((((*(*(struct {
+                                               Defs    []ItemDef
+                                               Aliases []struct{ Alias, Orig string }
+                                       }))(obj)).Aliases)[local115]).Alias))[:])
+                                       chk(err)
+                               }
+                               if len(([]byte((((*(*(struct {
+                                       Defs    []ItemDef
+                                       Aliases []struct{ Alias, Orig string }
+                               }))(obj)).Aliases)[local115]).Orig))) > math.MaxUint16 {
+                                       chk(ErrTooLong)
+                               }
+                               {
+                                       x := uint16(len(([]byte((((*(*(struct {
+                                               Defs    []ItemDef
+                                               Aliases []struct{ Alias, Orig string }
+                                       }))(obj)).Aliases)[local115]).Orig))))
+                                       write16(w, uint16(x))
+                               }
+                               {
+                                       _, err := w.Write(([]byte((((*(*(struct {
+                                               Defs    []ItemDef
+                                               Aliases []struct{ Alias, Orig string }
+                                       }))(obj)).Aliases)[local115]).Orig))[:])
+                                       chk(err)
+                               }
+                       }
+                       chk(w.Close())
+               }
+               {
+                       buf := w
+                       w := ow
+                       if len((buf.Bytes())) > math.MaxUint32 {
+                               chk(ErrTooLong)
+                       }
+                       {
+                               x := uint32(len((buf.Bytes())))
+                               write32(w, uint32(x))
+                       }
+                       {
+                               _, err := w.Write((buf.Bytes())[:])
+                               chk(err)
+                       }
+               }
+       }
+}
+
+func (obj *ToCltItemDefs) deserialize(r io.Reader) {
+       {
+               var n uint32
+               {
+                       p := &n
+                       *p = read32(r)
+               }
+               r := &io.LimitedReader{r, int64(n)}
+               {
+                       r, err := zlib.NewReader(byteReader{r})
+                       chk(err)
+                       {
+                               var local116 uint8
+                               {
+                                       p := &local116
+                                       *p = read8(r)
+                               }
+                               if local116 != (0) {
+                                       chk(fmt.Errorf("const %v: %v", 0, local116))
+                               }
+                       }
+                       var local117 uint16
+                       {
+                               p := &local117
+                               *p = read16(r)
+                       }
+                       ((*(*(struct {
+                               Defs    []ItemDef
+                               Aliases []struct{ Alias, Orig string }
+                       }))(obj)).Defs) = make([]ItemDef, local117)
+                       for local118 := range (*(*(struct {
+                               Defs    []ItemDef
+                               Aliases []struct{ Alias, Orig string }
+                       }))(obj)).Defs {
+                               if err := pcall(func() {
+                                       (((*(*(struct {
+                                               Defs    []ItemDef
+                                               Aliases []struct{ Alias, Orig string }
+                                       }))(obj)).Defs)[local118]).deserialize(r)
+                               }); err != nil {
+                                       if err == io.EOF {
+                                               chk(io.EOF)
+                                       }
+                                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ItemDef", err))
+                               }
+                       }
+                       var local119 uint16
+                       {
+                               p := &local119
+                               *p = read16(r)
+                       }
+                       ((*(*(struct {
+                               Defs    []ItemDef
+                               Aliases []struct{ Alias, Orig string }
+                       }))(obj)).Aliases) = make([]struct {
+                               Alias string
+                               Orig  string
+                       }, local119)
+                       for local120 := range (*(*(struct {
+                               Defs    []ItemDef
+                               Aliases []struct{ Alias, Orig string }
+                       }))(obj)).Aliases {
+                               var local121 []uint8
+                               var local122 uint16
+                               {
+                                       p := &local122
+                                       *p = read16(r)
+                               }
+                               (local121) = make([]uint8, local122)
+                               {
+                                       _, err := io.ReadFull(r, (local121)[:])
+                                       chk(err)
+                               }
+                               ((((*(*(struct {
+                                       Defs    []ItemDef
+                                       Aliases []struct{ Alias, Orig string }
+                               }))(obj)).Aliases)[local120]).Alias) = string(local121)
+                               var local123 []uint8
+                               var local124 uint16
+                               {
+                                       p := &local124
+                                       *p = read16(r)
+                               }
+                               (local123) = make([]uint8, local124)
+                               {
+                                       _, err := io.ReadFull(r, (local123)[:])
+                                       chk(err)
+                               }
+                               ((((*(*(struct {
+                                       Defs    []ItemDef
+                                       Aliases []struct{ Alias, Orig string }
+                               }))(obj)).Aliases)[local120]).Orig) = string(local123)
+                       }
+                       chk(r.Close())
+               }
+               if r.N > 0 {
+                       chk(fmt.Errorf("%d bytes of trailing data", r.N))
+               }
+       }
+}
+
+func (obj *ToCltPlaySound) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).ID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundID", err))
+       }
+       if len(([]byte((*(*(struct {
+               ID      SoundID
+               Name    string
+               Gain    float32
+               SrcType SoundSrcType
+               Pos
+               SrcAOID   AOID
+               Loop      bool
+               Fade      float32
+               Pitch     float32
+               Ephemeral bool
+       }))(obj)).Name))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Name))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Name))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Gain
+               write32(w, math.Float32bits(x))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).SrcType).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundSrcType", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Pos).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).SrcAOID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+       {
+               x := (*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Loop
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Fade
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Pitch
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Ephemeral
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+}
+
+func (obj *ToCltPlaySound) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).ID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundID", err))
+       }
+       var local125 []uint8
+       var local126 uint16
+       {
+               p := &local126
+               *p = read16(r)
+       }
+       (local125) = make([]uint8, local126)
+       {
+               _, err := io.ReadFull(r, (local125)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               ID      SoundID
+               Name    string
+               Gain    float32
+               SrcType SoundSrcType
+               Pos
+               SrcAOID   AOID
+               Loop      bool
+               Fade      float32
+               Pitch     float32
+               Ephemeral bool
+       }))(obj)).Name) = string(local125)
+       {
+               p := &(*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Gain
+               *p = math.Float32frombits(read32(r))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).SrcType).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundSrcType", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Pos).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).SrcAOID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+       {
+               p := &(*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Loop
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Fade
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Pitch
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       ID      SoundID
+                       Name    string
+                       Gain    float32
+                       SrcType SoundSrcType
+                       Pos
+                       SrcAOID   AOID
+                       Loop      bool
+                       Fade      float32
+                       Pitch     float32
+                       Ephemeral bool
+               }))(obj)).Ephemeral
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+}
+
+func (obj *ToCltStopSound) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID SoundID
+               }))(obj)).ID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundID", err))
+       }
+}
+
+func (obj *ToCltStopSound) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID SoundID
+               }))(obj)).ID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundID", err))
+       }
+}
+
+func (obj *ToCltPrivs) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               Privs []string
+       }))(obj)).Privs)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Privs []string
+               }))(obj)).Privs)))
+               write16(w, uint16(x))
+       }
+       for local127 := range (*(*(struct {
+               Privs []string
+       }))(obj)).Privs {
+               if len(([]byte(((*(*(struct {
+                       Privs []string
+               }))(obj)).Privs)[local127]))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte(((*(*(struct {
+                               Privs []string
+                       }))(obj)).Privs)[local127]))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte(((*(*(struct {
+                               Privs []string
+                       }))(obj)).Privs)[local127]))[:])
+                       chk(err)
+               }
+       }
+}
+
+func (obj *ToCltPrivs) deserialize(r io.Reader) {
+       var local128 uint16
+       {
+               p := &local128
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Privs []string
+       }))(obj)).Privs) = make([]string, local128)
+       for local129 := range (*(*(struct {
+               Privs []string
+       }))(obj)).Privs {
+               var local130 []uint8
+               var local131 uint16
+               {
+                       p := &local131
+                       *p = read16(r)
+               }
+               (local130) = make([]uint8, local131)
+               {
+                       _, err := io.ReadFull(r, (local130)[:])
+                       chk(err)
+               }
+               (((*(*(struct {
+                       Privs []string
+               }))(obj)).Privs)[local129]) = string(local130)
+       }
+}
+
+func (obj *ToCltInvFormspec) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               //mt:len32
+               Formspec string
+       }))(obj)).Formspec))) > math.MaxUint32 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint32(len(([]byte((*(*(struct {
+                       //mt:len32
+                       Formspec string
+               }))(obj)).Formspec))))
+               write32(w, uint32(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       //mt:len32
+                       Formspec string
+               }))(obj)).Formspec))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltInvFormspec) deserialize(r io.Reader) {
+       var local132 []uint8
+       var local133 uint32
+       {
+               p := &local133
+               *p = read32(r)
+       }
+       (local132) = make([]uint8, local133)
+       {
+               _, err := io.ReadFull(r, (local132)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               //mt:len32
+               Formspec string
+       }))(obj)).Formspec) = string(local132)
+}
+
+func (obj *ToCltDetachedInv) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Name string
+               Keep bool
+               Len  uint16 // deprecated
+
+               //mt:raw
+               Inv string
+       }))(obj)).Name))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Name string
+                       Keep bool
+                       Len  uint16 // deprecated
+
+                       //mt:raw
+                       Inv string
+               }))(obj)).Name))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Name string
+                       Keep bool
+                       Len  uint16 // deprecated
+
+                       //mt:raw
+                       Inv string
+               }))(obj)).Name))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       Name string
+                       Keep bool
+                       Len  uint16 // deprecated
+
+                       //mt:raw
+                       Inv string
+               }))(obj)).Keep
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Name string
+                       Keep bool
+                       Len  uint16 // deprecated
+
+                       //mt:raw
+                       Inv string
+               }))(obj)).Len
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Name string
+                       Keep bool
+                       Len  uint16 // deprecated
+
+                       //mt:raw
+                       Inv string
+               }))(obj)).Inv))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltDetachedInv) deserialize(r io.Reader) {
+       var local134 []uint8
+       var local135 uint16
+       {
+               p := &local135
+               *p = read16(r)
+       }
+       (local134) = make([]uint8, local135)
+       {
+               _, err := io.ReadFull(r, (local134)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Name string
+               Keep bool
+               Len  uint16 // deprecated
+
+               //mt:raw
+               Inv string
+       }))(obj)).Name) = string(local134)
+       {
+               p := &(*(*(struct {
+                       Name string
+                       Keep bool
+                       Len  uint16 // deprecated
+
+                       //mt:raw
+                       Inv string
+               }))(obj)).Keep
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Name string
+                       Keep bool
+                       Len  uint16 // deprecated
+
+                       //mt:raw
+                       Inv string
+               }))(obj)).Len
+               *p = read16(r)
+       }
+       var local136 []uint8
+       for {
+               var local137 uint8
+               err := pcall(func() {
+                       {
+                               p := &local137
+                               *p = read8(r)
+                       }
+               })
+               if err == io.EOF {
+                       break
+               }
+               (local136) = append((local136), local137)
+               chk(err)
+       }
+       ((*(*(struct {
+               Name string
+               Keep bool
+               Len  uint16 // deprecated
+
+               //mt:raw
+               Inv string
+       }))(obj)).Inv) = string(local136)
+}
+
+func (obj *ToCltShowFormspec) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               //mt:len32
+               Formspec string
+
+               Formname string
+       }))(obj)).Formspec))) > math.MaxUint32 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint32(len(([]byte((*(*(struct {
+                       //mt:len32
+                       Formspec string
+
+                       Formname string
+               }))(obj)).Formspec))))
+               write32(w, uint32(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       //mt:len32
+                       Formspec string
+
+                       Formname string
+               }))(obj)).Formspec))[:])
+               chk(err)
+       }
+       if len(([]byte((*(*(struct {
+               //mt:len32
+               Formspec string
+
+               Formname string
+       }))(obj)).Formname))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       //mt:len32
+                       Formspec string
+
+                       Formname string
+               }))(obj)).Formname))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       //mt:len32
+                       Formspec string
+
+                       Formname string
+               }))(obj)).Formname))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltShowFormspec) deserialize(r io.Reader) {
+       var local138 []uint8
+       var local139 uint32
+       {
+               p := &local139
+               *p = read32(r)
+       }
+       (local138) = make([]uint8, local139)
+       {
+               _, err := io.ReadFull(r, (local138)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               //mt:len32
+               Formspec string
+
+               Formname string
+       }))(obj)).Formspec) = string(local138)
+       var local140 []uint8
+       var local141 uint16
+       {
+               p := &local141
+               *p = read16(r)
+       }
+       (local140) = make([]uint8, local141)
+       {
+               _, err := io.ReadFull(r, (local140)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               //mt:len32
+               Formspec string
+
+               Formname string
+       }))(obj)).Formname) = string(local140)
+}
+
+func (obj *ToCltMovement) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).DefaultAccel
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).AirAccel
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).FastAccel
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).WalkSpeed
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).CrouchSpeed
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).FastSpeed
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).ClimbSpeed
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).JumpSpeed
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).Fluidity
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).Smoothing
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).Sink
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).Gravity
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *ToCltMovement) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).DefaultAccel
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).AirAccel
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).FastAccel
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).WalkSpeed
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).CrouchSpeed
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).FastSpeed
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).ClimbSpeed
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).JumpSpeed
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).Fluidity
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).Smoothing
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).Sink
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       DefaultAccel, AirAccel, FastAccel,
+                       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+                       Fluidity, Smoothing, Sink,
+                       Gravity float32
+               }))(obj)).Gravity
+               *p = math.Float32frombits(read32(r))
+       }
+}
+
+func (obj *ToCltSpawnParticle) serialize(w io.Writer) {
+       for local142 := range (*(*(struct {
+               Pos, Vel, Acc  [3]float32
+               ExpirationTime float32 // in seconds.
+               Size           float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               Vertical    bool
+               CollisionRm bool
+               AnimParams  TileAnim
+               Glow        uint8
+               AOCollision bool
+               NodeParam0  Content
+               NodeParam2  uint8
+               NodeTile    uint8
+       }))(obj)).Pos {
+               {
+                       x := ((*(*(struct {
+                               Pos, Vel, Acc  [3]float32
+                               ExpirationTime float32 // in seconds.
+                               Size           float32
+                               Collide        bool
+
+                               //mt:len32
+                               Texture
+
+                               Vertical    bool
+                               CollisionRm bool
+                               AnimParams  TileAnim
+                               Glow        uint8
+                               AOCollision bool
+                               NodeParam0  Content
+                               NodeParam2  uint8
+                               NodeTile    uint8
+                       }))(obj)).Pos)[local142]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       for local143 := range (*(*(struct {
+               Pos, Vel, Acc  [3]float32
+               ExpirationTime float32 // in seconds.
+               Size           float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               Vertical    bool
+               CollisionRm bool
+               AnimParams  TileAnim
+               Glow        uint8
+               AOCollision bool
+               NodeParam0  Content
+               NodeParam2  uint8
+               NodeTile    uint8
+       }))(obj)).Vel {
+               {
+                       x := ((*(*(struct {
+                               Pos, Vel, Acc  [3]float32
+                               ExpirationTime float32 // in seconds.
+                               Size           float32
+                               Collide        bool
+
+                               //mt:len32
+                               Texture
+
+                               Vertical    bool
+                               CollisionRm bool
+                               AnimParams  TileAnim
+                               Glow        uint8
+                               AOCollision bool
+                               NodeParam0  Content
+                               NodeParam2  uint8
+                               NodeTile    uint8
+                       }))(obj)).Vel)[local143]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       for local144 := range (*(*(struct {
+               Pos, Vel, Acc  [3]float32
+               ExpirationTime float32 // in seconds.
+               Size           float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               Vertical    bool
+               CollisionRm bool
+               AnimParams  TileAnim
+               Glow        uint8
+               AOCollision bool
+               NodeParam0  Content
+               NodeParam2  uint8
+               NodeTile    uint8
+       }))(obj)).Acc {
+               {
+                       x := ((*(*(struct {
+                               Pos, Vel, Acc  [3]float32
+                               ExpirationTime float32 // in seconds.
+                               Size           float32
+                               Collide        bool
+
+                               //mt:len32
+                               Texture
+
+                               Vertical    bool
+                               CollisionRm bool
+                               AnimParams  TileAnim
+                               Glow        uint8
+                               AOCollision bool
+                               NodeParam0  Content
+                               NodeParam2  uint8
+                               NodeTile    uint8
+                       }))(obj)).Acc)[local144]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).ExpirationTime
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).Size
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).Collide
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if len(([]byte(*(*string)(&((*(*(struct {
+               Pos, Vel, Acc  [3]float32
+               ExpirationTime float32 // in seconds.
+               Size           float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               Vertical    bool
+               CollisionRm bool
+               AnimParams  TileAnim
+               Glow        uint8
+               AOCollision bool
+               NodeParam0  Content
+               NodeParam2  uint8
+               NodeTile    uint8
+       }))(obj)).Texture))))) > math.MaxUint32 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint32(len(([]byte(*(*string)(&((*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).Texture))))))
+               write32(w, uint32(x))
+       }
+       {
+               _, err := w.Write(([]byte(*(*string)(&((*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).Texture))))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).Vertical
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).CollisionRm
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).AnimParams).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileAnim", err))
+       }
+       {
+               x := (*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).Glow
+               write8(w, uint8(x))
+       }
+       {
+               x := (*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).AOCollision
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).NodeParam0).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Content", err))
+       }
+       {
+               x := (*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).NodeParam2
+               write8(w, uint8(x))
+       }
+       {
+               x := (*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).NodeTile
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *ToCltSpawnParticle) deserialize(r io.Reader) {
+       for local145 := range (*(*(struct {
+               Pos, Vel, Acc  [3]float32
+               ExpirationTime float32 // in seconds.
+               Size           float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               Vertical    bool
+               CollisionRm bool
+               AnimParams  TileAnim
+               Glow        uint8
+               AOCollision bool
+               NodeParam0  Content
+               NodeParam2  uint8
+               NodeTile    uint8
+       }))(obj)).Pos {
+               {
+                       p := &((*(*(struct {
+                               Pos, Vel, Acc  [3]float32
+                               ExpirationTime float32 // in seconds.
+                               Size           float32
+                               Collide        bool
+
+                               //mt:len32
+                               Texture
+
+                               Vertical    bool
+                               CollisionRm bool
+                               AnimParams  TileAnim
+                               Glow        uint8
+                               AOCollision bool
+                               NodeParam0  Content
+                               NodeParam2  uint8
+                               NodeTile    uint8
+                       }))(obj)).Pos)[local145]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       for local146 := range (*(*(struct {
+               Pos, Vel, Acc  [3]float32
+               ExpirationTime float32 // in seconds.
+               Size           float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               Vertical    bool
+               CollisionRm bool
+               AnimParams  TileAnim
+               Glow        uint8
+               AOCollision bool
+               NodeParam0  Content
+               NodeParam2  uint8
+               NodeTile    uint8
+       }))(obj)).Vel {
+               {
+                       p := &((*(*(struct {
+                               Pos, Vel, Acc  [3]float32
+                               ExpirationTime float32 // in seconds.
+                               Size           float32
+                               Collide        bool
+
+                               //mt:len32
+                               Texture
+
+                               Vertical    bool
+                               CollisionRm bool
+                               AnimParams  TileAnim
+                               Glow        uint8
+                               AOCollision bool
+                               NodeParam0  Content
+                               NodeParam2  uint8
+                               NodeTile    uint8
+                       }))(obj)).Vel)[local146]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       for local147 := range (*(*(struct {
+               Pos, Vel, Acc  [3]float32
+               ExpirationTime float32 // in seconds.
+               Size           float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               Vertical    bool
+               CollisionRm bool
+               AnimParams  TileAnim
+               Glow        uint8
+               AOCollision bool
+               NodeParam0  Content
+               NodeParam2  uint8
+               NodeTile    uint8
+       }))(obj)).Acc {
+               {
+                       p := &((*(*(struct {
+                               Pos, Vel, Acc  [3]float32
+                               ExpirationTime float32 // in seconds.
+                               Size           float32
+                               Collide        bool
+
+                               //mt:len32
+                               Texture
+
+                               Vertical    bool
+                               CollisionRm bool
+                               AnimParams  TileAnim
+                               Glow        uint8
+                               AOCollision bool
+                               NodeParam0  Content
+                               NodeParam2  uint8
+                               NodeTile    uint8
+                       }))(obj)).Acc)[local147]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).ExpirationTime
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).Size
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).Collide
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       var local148 []uint8
+       var local149 uint32
+       {
+               p := &local149
+               *p = read32(r)
+       }
+       (local148) = make([]uint8, local149)
+       {
+               _, err := io.ReadFull(r, (local148)[:])
+               chk(err)
+       }
+       (*(*string)(&((*(*(struct {
+               Pos, Vel, Acc  [3]float32
+               ExpirationTime float32 // in seconds.
+               Size           float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               Vertical    bool
+               CollisionRm bool
+               AnimParams  TileAnim
+               Glow        uint8
+               AOCollision bool
+               NodeParam0  Content
+               NodeParam2  uint8
+               NodeTile    uint8
+       }))(obj)).Texture))) = string(local148)
+       {
+               p := &(*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).Vertical
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).CollisionRm
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).AnimParams).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileAnim", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).Glow
+               *p = read8(r)
+       }
+       {
+               p := &(*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).AOCollision
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).NodeParam0).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Content", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).NodeParam2
+               *p = read8(r)
+       }
+       {
+               p := &(*(*(struct {
+                       Pos, Vel, Acc  [3]float32
+                       ExpirationTime float32 // in seconds.
+                       Size           float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       Vertical    bool
+                       CollisionRm bool
+                       AnimParams  TileAnim
+                       Glow        uint8
+                       AOCollision bool
+                       NodeParam0  Content
+                       NodeParam2  uint8
+                       NodeTile    uint8
+               }))(obj)).NodeTile
+               *p = read8(r)
+       }
+}
+
+func (obj *ToCltAddParticleSpawner) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Amount
+               write16(w, uint16(x))
+       }
+       {
+               x := (*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Duration
+               write32(w, math.Float32bits(x))
+       }
+       for local150 := range (*(*(struct {
+               Amount         uint16
+               Duration       float32
+               Pos, Vel, Acc  [2][3]float32
+               ExpirationTime [2]float32 // in seconds.
+               Size           [2]float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               ID           ParticleSpawnerID
+               Vertical     bool
+               CollisionRm  bool
+               AttachedAOID AOID
+               AnimParams   TileAnim
+               Glow         uint8
+               AOCollision  bool
+               NodeParam0   Content
+               NodeParam2   uint8
+               NodeTile     uint8
+       }))(obj)).Pos {
+               for local151 := range ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Pos)[local150] {
+                       {
+                               x := (((*(*(struct {
+                                       Amount         uint16
+                                       Duration       float32
+                                       Pos, Vel, Acc  [2][3]float32
+                                       ExpirationTime [2]float32 // in seconds.
+                                       Size           [2]float32
+                                       Collide        bool
+
+                                       //mt:len32
+                                       Texture
+
+                                       ID           ParticleSpawnerID
+                                       Vertical     bool
+                                       CollisionRm  bool
+                                       AttachedAOID AOID
+                                       AnimParams   TileAnim
+                                       Glow         uint8
+                                       AOCollision  bool
+                                       NodeParam0   Content
+                                       NodeParam2   uint8
+                                       NodeTile     uint8
+                               }))(obj)).Pos)[local150])[local151]
+                               write32(w, math.Float32bits(x))
+                       }
+               }
+       }
+       for local152 := range (*(*(struct {
+               Amount         uint16
+               Duration       float32
+               Pos, Vel, Acc  [2][3]float32
+               ExpirationTime [2]float32 // in seconds.
+               Size           [2]float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               ID           ParticleSpawnerID
+               Vertical     bool
+               CollisionRm  bool
+               AttachedAOID AOID
+               AnimParams   TileAnim
+               Glow         uint8
+               AOCollision  bool
+               NodeParam0   Content
+               NodeParam2   uint8
+               NodeTile     uint8
+       }))(obj)).Vel {
+               for local153 := range ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Vel)[local152] {
+                       {
+                               x := (((*(*(struct {
+                                       Amount         uint16
+                                       Duration       float32
+                                       Pos, Vel, Acc  [2][3]float32
+                                       ExpirationTime [2]float32 // in seconds.
+                                       Size           [2]float32
+                                       Collide        bool
+
+                                       //mt:len32
+                                       Texture
+
+                                       ID           ParticleSpawnerID
+                                       Vertical     bool
+                                       CollisionRm  bool
+                                       AttachedAOID AOID
+                                       AnimParams   TileAnim
+                                       Glow         uint8
+                                       AOCollision  bool
+                                       NodeParam0   Content
+                                       NodeParam2   uint8
+                                       NodeTile     uint8
+                               }))(obj)).Vel)[local152])[local153]
+                               write32(w, math.Float32bits(x))
+                       }
+               }
+       }
+       for local154 := range (*(*(struct {
+               Amount         uint16
+               Duration       float32
+               Pos, Vel, Acc  [2][3]float32
+               ExpirationTime [2]float32 // in seconds.
+               Size           [2]float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               ID           ParticleSpawnerID
+               Vertical     bool
+               CollisionRm  bool
+               AttachedAOID AOID
+               AnimParams   TileAnim
+               Glow         uint8
+               AOCollision  bool
+               NodeParam0   Content
+               NodeParam2   uint8
+               NodeTile     uint8
+       }))(obj)).Acc {
+               for local155 := range ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Acc)[local154] {
+                       {
+                               x := (((*(*(struct {
+                                       Amount         uint16
+                                       Duration       float32
+                                       Pos, Vel, Acc  [2][3]float32
+                                       ExpirationTime [2]float32 // in seconds.
+                                       Size           [2]float32
+                                       Collide        bool
+
+                                       //mt:len32
+                                       Texture
+
+                                       ID           ParticleSpawnerID
+                                       Vertical     bool
+                                       CollisionRm  bool
+                                       AttachedAOID AOID
+                                       AnimParams   TileAnim
+                                       Glow         uint8
+                                       AOCollision  bool
+                                       NodeParam0   Content
+                                       NodeParam2   uint8
+                                       NodeTile     uint8
+                               }))(obj)).Acc)[local154])[local155]
+                               write32(w, math.Float32bits(x))
+                       }
+               }
+       }
+       for local156 := range (*(*(struct {
+               Amount         uint16
+               Duration       float32
+               Pos, Vel, Acc  [2][3]float32
+               ExpirationTime [2]float32 // in seconds.
+               Size           [2]float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               ID           ParticleSpawnerID
+               Vertical     bool
+               CollisionRm  bool
+               AttachedAOID AOID
+               AnimParams   TileAnim
+               Glow         uint8
+               AOCollision  bool
+               NodeParam0   Content
+               NodeParam2   uint8
+               NodeTile     uint8
+       }))(obj)).ExpirationTime {
+               {
+                       x := ((*(*(struct {
+                               Amount         uint16
+                               Duration       float32
+                               Pos, Vel, Acc  [2][3]float32
+                               ExpirationTime [2]float32 // in seconds.
+                               Size           [2]float32
+                               Collide        bool
+
+                               //mt:len32
+                               Texture
+
+                               ID           ParticleSpawnerID
+                               Vertical     bool
+                               CollisionRm  bool
+                               AttachedAOID AOID
+                               AnimParams   TileAnim
+                               Glow         uint8
+                               AOCollision  bool
+                               NodeParam0   Content
+                               NodeParam2   uint8
+                               NodeTile     uint8
+                       }))(obj)).ExpirationTime)[local156]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       for local157 := range (*(*(struct {
+               Amount         uint16
+               Duration       float32
+               Pos, Vel, Acc  [2][3]float32
+               ExpirationTime [2]float32 // in seconds.
+               Size           [2]float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               ID           ParticleSpawnerID
+               Vertical     bool
+               CollisionRm  bool
+               AttachedAOID AOID
+               AnimParams   TileAnim
+               Glow         uint8
+               AOCollision  bool
+               NodeParam0   Content
+               NodeParam2   uint8
+               NodeTile     uint8
+       }))(obj)).Size {
+               {
+                       x := ((*(*(struct {
+                               Amount         uint16
+                               Duration       float32
+                               Pos, Vel, Acc  [2][3]float32
+                               ExpirationTime [2]float32 // in seconds.
+                               Size           [2]float32
+                               Collide        bool
+
+                               //mt:len32
+                               Texture
+
+                               ID           ParticleSpawnerID
+                               Vertical     bool
+                               CollisionRm  bool
+                               AttachedAOID AOID
+                               AnimParams   TileAnim
+                               Glow         uint8
+                               AOCollision  bool
+                               NodeParam0   Content
+                               NodeParam2   uint8
+                               NodeTile     uint8
+                       }))(obj)).Size)[local157]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Collide
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if len(([]byte(*(*string)(&((*(*(struct {
+               Amount         uint16
+               Duration       float32
+               Pos, Vel, Acc  [2][3]float32
+               ExpirationTime [2]float32 // in seconds.
+               Size           [2]float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               ID           ParticleSpawnerID
+               Vertical     bool
+               CollisionRm  bool
+               AttachedAOID AOID
+               AnimParams   TileAnim
+               Glow         uint8
+               AOCollision  bool
+               NodeParam0   Content
+               NodeParam2   uint8
+               NodeTile     uint8
+       }))(obj)).Texture))))) > math.MaxUint32 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint32(len(([]byte(*(*string)(&((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Texture))))))
+               write32(w, uint32(x))
+       }
+       {
+               _, err := w.Write(([]byte(*(*string)(&((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Texture))))[:])
+               chk(err)
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).ID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ParticleSpawnerID", err))
+       }
+       {
+               x := (*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Vertical
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).CollisionRm
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).AttachedAOID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).AnimParams).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileAnim", err))
+       }
+       {
+               x := (*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Glow
+               write8(w, uint8(x))
+       }
+       {
+               x := (*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).AOCollision
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).NodeParam0).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Content", err))
+       }
+       {
+               x := (*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).NodeParam2
+               write8(w, uint8(x))
+       }
+       {
+               x := (*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).NodeTile
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *ToCltAddParticleSpawner) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Amount
+               *p = read16(r)
+       }
+       {
+               p := &(*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Duration
+               *p = math.Float32frombits(read32(r))
+       }
+       for local158 := range (*(*(struct {
+               Amount         uint16
+               Duration       float32
+               Pos, Vel, Acc  [2][3]float32
+               ExpirationTime [2]float32 // in seconds.
+               Size           [2]float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               ID           ParticleSpawnerID
+               Vertical     bool
+               CollisionRm  bool
+               AttachedAOID AOID
+               AnimParams   TileAnim
+               Glow         uint8
+               AOCollision  bool
+               NodeParam0   Content
+               NodeParam2   uint8
+               NodeTile     uint8
+       }))(obj)).Pos {
+               for local159 := range ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Pos)[local158] {
+                       {
+                               p := &(((*(*(struct {
+                                       Amount         uint16
+                                       Duration       float32
+                                       Pos, Vel, Acc  [2][3]float32
+                                       ExpirationTime [2]float32 // in seconds.
+                                       Size           [2]float32
+                                       Collide        bool
+
+                                       //mt:len32
+                                       Texture
+
+                                       ID           ParticleSpawnerID
+                                       Vertical     bool
+                                       CollisionRm  bool
+                                       AttachedAOID AOID
+                                       AnimParams   TileAnim
+                                       Glow         uint8
+                                       AOCollision  bool
+                                       NodeParam0   Content
+                                       NodeParam2   uint8
+                                       NodeTile     uint8
+                               }))(obj)).Pos)[local158])[local159]
+                               *p = math.Float32frombits(read32(r))
+                       }
+               }
+       }
+       for local160 := range (*(*(struct {
+               Amount         uint16
+               Duration       float32
+               Pos, Vel, Acc  [2][3]float32
+               ExpirationTime [2]float32 // in seconds.
+               Size           [2]float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               ID           ParticleSpawnerID
+               Vertical     bool
+               CollisionRm  bool
+               AttachedAOID AOID
+               AnimParams   TileAnim
+               Glow         uint8
+               AOCollision  bool
+               NodeParam0   Content
+               NodeParam2   uint8
+               NodeTile     uint8
+       }))(obj)).Vel {
+               for local161 := range ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Vel)[local160] {
+                       {
+                               p := &(((*(*(struct {
+                                       Amount         uint16
+                                       Duration       float32
+                                       Pos, Vel, Acc  [2][3]float32
+                                       ExpirationTime [2]float32 // in seconds.
+                                       Size           [2]float32
+                                       Collide        bool
+
+                                       //mt:len32
+                                       Texture
+
+                                       ID           ParticleSpawnerID
+                                       Vertical     bool
+                                       CollisionRm  bool
+                                       AttachedAOID AOID
+                                       AnimParams   TileAnim
+                                       Glow         uint8
+                                       AOCollision  bool
+                                       NodeParam0   Content
+                                       NodeParam2   uint8
+                                       NodeTile     uint8
+                               }))(obj)).Vel)[local160])[local161]
+                               *p = math.Float32frombits(read32(r))
+                       }
+               }
+       }
+       for local162 := range (*(*(struct {
+               Amount         uint16
+               Duration       float32
+               Pos, Vel, Acc  [2][3]float32
+               ExpirationTime [2]float32 // in seconds.
+               Size           [2]float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               ID           ParticleSpawnerID
+               Vertical     bool
+               CollisionRm  bool
+               AttachedAOID AOID
+               AnimParams   TileAnim
+               Glow         uint8
+               AOCollision  bool
+               NodeParam0   Content
+               NodeParam2   uint8
+               NodeTile     uint8
+       }))(obj)).Acc {
+               for local163 := range ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Acc)[local162] {
+                       {
+                               p := &(((*(*(struct {
+                                       Amount         uint16
+                                       Duration       float32
+                                       Pos, Vel, Acc  [2][3]float32
+                                       ExpirationTime [2]float32 // in seconds.
+                                       Size           [2]float32
+                                       Collide        bool
+
+                                       //mt:len32
+                                       Texture
+
+                                       ID           ParticleSpawnerID
+                                       Vertical     bool
+                                       CollisionRm  bool
+                                       AttachedAOID AOID
+                                       AnimParams   TileAnim
+                                       Glow         uint8
+                                       AOCollision  bool
+                                       NodeParam0   Content
+                                       NodeParam2   uint8
+                                       NodeTile     uint8
+                               }))(obj)).Acc)[local162])[local163]
+                               *p = math.Float32frombits(read32(r))
+                       }
+               }
+       }
+       for local164 := range (*(*(struct {
+               Amount         uint16
+               Duration       float32
+               Pos, Vel, Acc  [2][3]float32
+               ExpirationTime [2]float32 // in seconds.
+               Size           [2]float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               ID           ParticleSpawnerID
+               Vertical     bool
+               CollisionRm  bool
+               AttachedAOID AOID
+               AnimParams   TileAnim
+               Glow         uint8
+               AOCollision  bool
+               NodeParam0   Content
+               NodeParam2   uint8
+               NodeTile     uint8
+       }))(obj)).ExpirationTime {
+               {
+                       p := &((*(*(struct {
+                               Amount         uint16
+                               Duration       float32
+                               Pos, Vel, Acc  [2][3]float32
+                               ExpirationTime [2]float32 // in seconds.
+                               Size           [2]float32
+                               Collide        bool
+
+                               //mt:len32
+                               Texture
+
+                               ID           ParticleSpawnerID
+                               Vertical     bool
+                               CollisionRm  bool
+                               AttachedAOID AOID
+                               AnimParams   TileAnim
+                               Glow         uint8
+                               AOCollision  bool
+                               NodeParam0   Content
+                               NodeParam2   uint8
+                               NodeTile     uint8
+                       }))(obj)).ExpirationTime)[local164]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       for local165 := range (*(*(struct {
+               Amount         uint16
+               Duration       float32
+               Pos, Vel, Acc  [2][3]float32
+               ExpirationTime [2]float32 // in seconds.
+               Size           [2]float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               ID           ParticleSpawnerID
+               Vertical     bool
+               CollisionRm  bool
+               AttachedAOID AOID
+               AnimParams   TileAnim
+               Glow         uint8
+               AOCollision  bool
+               NodeParam0   Content
+               NodeParam2   uint8
+               NodeTile     uint8
+       }))(obj)).Size {
+               {
+                       p := &((*(*(struct {
+                               Amount         uint16
+                               Duration       float32
+                               Pos, Vel, Acc  [2][3]float32
+                               ExpirationTime [2]float32 // in seconds.
+                               Size           [2]float32
+                               Collide        bool
+
+                               //mt:len32
+                               Texture
+
+                               ID           ParticleSpawnerID
+                               Vertical     bool
+                               CollisionRm  bool
+                               AttachedAOID AOID
+                               AnimParams   TileAnim
+                               Glow         uint8
+                               AOCollision  bool
+                               NodeParam0   Content
+                               NodeParam2   uint8
+                               NodeTile     uint8
+                       }))(obj)).Size)[local165]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Collide
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       var local166 []uint8
+       var local167 uint32
+       {
+               p := &local167
+               *p = read32(r)
+       }
+       (local166) = make([]uint8, local167)
+       {
+               _, err := io.ReadFull(r, (local166)[:])
+               chk(err)
+       }
+       (*(*string)(&((*(*(struct {
+               Amount         uint16
+               Duration       float32
+               Pos, Vel, Acc  [2][3]float32
+               ExpirationTime [2]float32 // in seconds.
+               Size           [2]float32
+               Collide        bool
+
+               //mt:len32
+               Texture
+
+               ID           ParticleSpawnerID
+               Vertical     bool
+               CollisionRm  bool
+               AttachedAOID AOID
+               AnimParams   TileAnim
+               Glow         uint8
+               AOCollision  bool
+               NodeParam0   Content
+               NodeParam2   uint8
+               NodeTile     uint8
+       }))(obj)).Texture))) = string(local166)
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).ID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ParticleSpawnerID", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Vertical
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).CollisionRm
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).AttachedAOID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).AnimParams).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileAnim", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).Glow
+               *p = read8(r)
+       }
+       {
+               p := &(*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).AOCollision
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).NodeParam0).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Content", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).NodeParam2
+               *p = read8(r)
+       }
+       {
+               p := &(*(*(struct {
+                       Amount         uint16
+                       Duration       float32
+                       Pos, Vel, Acc  [2][3]float32
+                       ExpirationTime [2]float32 // in seconds.
+                       Size           [2]float32
+                       Collide        bool
+
+                       //mt:len32
+                       Texture
+
+                       ID           ParticleSpawnerID
+                       Vertical     bool
+                       CollisionRm  bool
+                       AttachedAOID AOID
+                       AnimParams   TileAnim
+                       Glow         uint8
+                       AOCollision  bool
+                       NodeParam0   Content
+                       NodeParam2   uint8
+                       NodeTile     uint8
+               }))(obj)).NodeTile
+               *p = read8(r)
+       }
+}
+
+func (obj *ToCltAddHUD) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).ID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDID", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Type).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDType", err))
+       }
+       for local168 := range (*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Pos {
+               {
+                       x := ((*(*(struct {
+                               ID HUDID
+
+                               Type HUDType
+
+                               Pos      [2]float32
+                               Name     string
+                               Scale    [2]float32
+                               Text     string
+                               Number   uint32
+                               Item     uint32
+                               Dir      uint32
+                               Align    [2]float32
+                               Offset   [2]float32
+                               WorldPos Pos
+                               Size     [2]int32
+                               ZIndex   int16
+                               Text2    string
+                       }))(obj)).Pos)[local168]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       if len(([]byte((*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Name))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Name))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Name))[:])
+               chk(err)
+       }
+       for local169 := range (*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Scale {
+               {
+                       x := ((*(*(struct {
+                               ID HUDID
+
+                               Type HUDType
+
+                               Pos      [2]float32
+                               Name     string
+                               Scale    [2]float32
+                               Text     string
+                               Number   uint32
+                               Item     uint32
+                               Dir      uint32
+                               Align    [2]float32
+                               Offset   [2]float32
+                               WorldPos Pos
+                               Size     [2]int32
+                               ZIndex   int16
+                               Text2    string
+                       }))(obj)).Scale)[local169]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       if len(([]byte((*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Text))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Text))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Text))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Number
+               write32(w, uint32(x))
+       }
+       {
+               x := (*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Item
+               write32(w, uint32(x))
+       }
+       {
+               x := (*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Dir
+               write32(w, uint32(x))
+       }
+       for local170 := range (*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Align {
+               {
+                       x := ((*(*(struct {
+                               ID HUDID
+
+                               Type HUDType
+
+                               Pos      [2]float32
+                               Name     string
+                               Scale    [2]float32
+                               Text     string
+                               Number   uint32
+                               Item     uint32
+                               Dir      uint32
+                               Align    [2]float32
+                               Offset   [2]float32
+                               WorldPos Pos
+                               Size     [2]int32
+                               ZIndex   int16
+                               Text2    string
+                       }))(obj)).Align)[local170]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       for local171 := range (*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Offset {
+               {
+                       x := ((*(*(struct {
+                               ID HUDID
+
+                               Type HUDType
+
+                               Pos      [2]float32
+                               Name     string
+                               Scale    [2]float32
+                               Text     string
+                               Number   uint32
+                               Item     uint32
+                               Dir      uint32
+                               Align    [2]float32
+                               Offset   [2]float32
+                               WorldPos Pos
+                               Size     [2]int32
+                               ZIndex   int16
+                               Text2    string
+                       }))(obj)).Offset)[local171]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).WorldPos).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+       for local172 := range (*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Size {
+               {
+                       x := ((*(*(struct {
+                               ID HUDID
+
+                               Type HUDType
+
+                               Pos      [2]float32
+                               Name     string
+                               Scale    [2]float32
+                               Text     string
+                               Number   uint32
+                               Item     uint32
+                               Dir      uint32
+                               Align    [2]float32
+                               Offset   [2]float32
+                               WorldPos Pos
+                               Size     [2]int32
+                               ZIndex   int16
+                               Text2    string
+                       }))(obj)).Size)[local172]
+                       write32(w, uint32(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).ZIndex
+               write16(w, uint16(x))
+       }
+       if len(([]byte((*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Text2))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Text2))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Text2))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltAddHUD) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).ID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDID", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Type).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDType", err))
+       }
+       for local173 := range (*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Pos {
+               {
+                       p := &((*(*(struct {
+                               ID HUDID
+
+                               Type HUDType
+
+                               Pos      [2]float32
+                               Name     string
+                               Scale    [2]float32
+                               Text     string
+                               Number   uint32
+                               Item     uint32
+                               Dir      uint32
+                               Align    [2]float32
+                               Offset   [2]float32
+                               WorldPos Pos
+                               Size     [2]int32
+                               ZIndex   int16
+                               Text2    string
+                       }))(obj)).Pos)[local173]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       var local174 []uint8
+       var local175 uint16
+       {
+               p := &local175
+               *p = read16(r)
+       }
+       (local174) = make([]uint8, local175)
+       {
+               _, err := io.ReadFull(r, (local174)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Name) = string(local174)
+       for local176 := range (*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Scale {
+               {
+                       p := &((*(*(struct {
+                               ID HUDID
+
+                               Type HUDType
+
+                               Pos      [2]float32
+                               Name     string
+                               Scale    [2]float32
+                               Text     string
+                               Number   uint32
+                               Item     uint32
+                               Dir      uint32
+                               Align    [2]float32
+                               Offset   [2]float32
+                               WorldPos Pos
+                               Size     [2]int32
+                               ZIndex   int16
+                               Text2    string
+                       }))(obj)).Scale)[local176]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       var local177 []uint8
+       var local178 uint16
+       {
+               p := &local178
+               *p = read16(r)
+       }
+       (local177) = make([]uint8, local178)
+       {
+               _, err := io.ReadFull(r, (local177)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Text) = string(local177)
+       {
+               p := &(*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Number
+               *p = read32(r)
+       }
+       {
+               p := &(*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Item
+               *p = read32(r)
+       }
+       {
+               p := &(*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).Dir
+               *p = read32(r)
+       }
+       for local179 := range (*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Align {
+               {
+                       p := &((*(*(struct {
+                               ID HUDID
+
+                               Type HUDType
+
+                               Pos      [2]float32
+                               Name     string
+                               Scale    [2]float32
+                               Text     string
+                               Number   uint32
+                               Item     uint32
+                               Dir      uint32
+                               Align    [2]float32
+                               Offset   [2]float32
+                               WorldPos Pos
+                               Size     [2]int32
+                               ZIndex   int16
+                               Text2    string
+                       }))(obj)).Align)[local179]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       for local180 := range (*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Offset {
+               {
+                       p := &((*(*(struct {
+                               ID HUDID
+
+                               Type HUDType
+
+                               Pos      [2]float32
+                               Name     string
+                               Scale    [2]float32
+                               Text     string
+                               Number   uint32
+                               Item     uint32
+                               Dir      uint32
+                               Align    [2]float32
+                               Offset   [2]float32
+                               WorldPos Pos
+                               Size     [2]int32
+                               ZIndex   int16
+                               Text2    string
+                       }))(obj)).Offset)[local180]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).WorldPos).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+       for local181 := range (*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Size {
+               {
+                       p := &((*(*(struct {
+                               ID HUDID
+
+                               Type HUDType
+
+                               Pos      [2]float32
+                               Name     string
+                               Scale    [2]float32
+                               Text     string
+                               Number   uint32
+                               Item     uint32
+                               Dir      uint32
+                               Align    [2]float32
+                               Offset   [2]float32
+                               WorldPos Pos
+                               Size     [2]int32
+                               ZIndex   int16
+                               Text2    string
+                       }))(obj)).Size)[local181]
+                       *p = int32(read32(r))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       ID HUDID
+
+                       Type HUDType
+
+                       Pos      [2]float32
+                       Name     string
+                       Scale    [2]float32
+                       Text     string
+                       Number   uint32
+                       Item     uint32
+                       Dir      uint32
+                       Align    [2]float32
+                       Offset   [2]float32
+                       WorldPos Pos
+                       Size     [2]int32
+                       ZIndex   int16
+                       Text2    string
+               }))(obj)).ZIndex
+               *p = int16(read16(r))
+       }
+       var local182 []uint8
+       var local183 uint16
+       {
+               p := &local183
+               *p = read16(r)
+       }
+       (local182) = make([]uint8, local183)
+       {
+               _, err := io.ReadFull(r, (local182)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               ID HUDID
+
+               Type HUDType
+
+               Pos      [2]float32
+               Name     string
+               Scale    [2]float32
+               Text     string
+               Number   uint32
+               Item     uint32
+               Dir      uint32
+               Align    [2]float32
+               Offset   [2]float32
+               WorldPos Pos
+               Size     [2]int32
+               ZIndex   int16
+               Text2    string
+       }))(obj)).Text2) = string(local182)
+}
+
+func (obj *ToCltRmHUD) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID HUDID
+               }))(obj)).ID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDID", err))
+       }
+}
+
+func (obj *ToCltRmHUD) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID HUDID
+               }))(obj)).ID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDID", err))
+       }
+}
+
+func (obj *ToCltChangeHUD) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).ID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDID", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Field).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDField", err))
+       }
+       if !((*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field < hudMax) {
+               chk(errors.New("assertion failed: %s.Field < hudMax"))
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDPos {
+               for local184 := range (*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Pos {
+                       {
+                               x := ((*(*(struct {
+                                       ID HUDID
+
+                                       Field HUDField
+
+                                       //mt:if %s.Field == HUDPos
+                                       Pos [2]float32
+
+                                       //mt:if %s.Field == HUDName
+                                       Name string
+
+                                       //mt:if %s.Field == HUDScale
+                                       Scale [2]float32
+
+                                       //mt:if %s.Field == HUDText
+                                       Text string
+
+                                       //mt:if %s.Field == HUDNumber
+                                       Number uint32
+
+                                       //mt:if %s.Field == HUDItem
+                                       Item uint32
+
+                                       //mt:if %s.Field == HUDDir
+                                       Dir uint32
+
+                                       //mt:if %s.Field == HUDAlign
+                                       Align [2]float32
+
+                                       //mt:if %s.Field == HUDOffset
+                                       Offset [2]float32
+
+                                       //mt:if %s.Field == HUDWorldPos
+                                       WorldPos Pos
+
+                                       //mt:if %s.Field == HUDSize
+                                       Size [2]int32
+
+                                       //mt:if %s.Field == HUDZIndex
+                                       ZIndex uint32
+
+                                       //mt:if %s.Field == HUDText2
+                                       Text2 string
+                               }))(obj)).Pos)[local184]
+                               write32(w, math.Float32bits(x))
+                       }
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDName {
+               if len(([]byte((*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Name))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).Name))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).Name))[:])
+                       chk(err)
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDScale {
+               for local185 := range (*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Scale {
+                       {
+                               x := ((*(*(struct {
+                                       ID HUDID
+
+                                       Field HUDField
+
+                                       //mt:if %s.Field == HUDPos
+                                       Pos [2]float32
+
+                                       //mt:if %s.Field == HUDName
+                                       Name string
+
+                                       //mt:if %s.Field == HUDScale
+                                       Scale [2]float32
+
+                                       //mt:if %s.Field == HUDText
+                                       Text string
+
+                                       //mt:if %s.Field == HUDNumber
+                                       Number uint32
+
+                                       //mt:if %s.Field == HUDItem
+                                       Item uint32
+
+                                       //mt:if %s.Field == HUDDir
+                                       Dir uint32
+
+                                       //mt:if %s.Field == HUDAlign
+                                       Align [2]float32
+
+                                       //mt:if %s.Field == HUDOffset
+                                       Offset [2]float32
+
+                                       //mt:if %s.Field == HUDWorldPos
+                                       WorldPos Pos
+
+                                       //mt:if %s.Field == HUDSize
+                                       Size [2]int32
+
+                                       //mt:if %s.Field == HUDZIndex
+                                       ZIndex uint32
+
+                                       //mt:if %s.Field == HUDText2
+                                       Text2 string
+                               }))(obj)).Scale)[local185]
+                               write32(w, math.Float32bits(x))
+                       }
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDText {
+               if len(([]byte((*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Text))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).Text))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).Text))[:])
+                       chk(err)
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDNumber {
+               {
+                       x := (*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).Number
+                       write32(w, uint32(x))
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDItem {
+               {
+                       x := (*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).Item
+                       write32(w, uint32(x))
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDDir {
+               {
+                       x := (*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).Dir
+                       write32(w, uint32(x))
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDAlign {
+               for local186 := range (*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Align {
+                       {
+                               x := ((*(*(struct {
+                                       ID HUDID
+
+                                       Field HUDField
+
+                                       //mt:if %s.Field == HUDPos
+                                       Pos [2]float32
+
+                                       //mt:if %s.Field == HUDName
+                                       Name string
+
+                                       //mt:if %s.Field == HUDScale
+                                       Scale [2]float32
+
+                                       //mt:if %s.Field == HUDText
+                                       Text string
+
+                                       //mt:if %s.Field == HUDNumber
+                                       Number uint32
+
+                                       //mt:if %s.Field == HUDItem
+                                       Item uint32
+
+                                       //mt:if %s.Field == HUDDir
+                                       Dir uint32
+
+                                       //mt:if %s.Field == HUDAlign
+                                       Align [2]float32
+
+                                       //mt:if %s.Field == HUDOffset
+                                       Offset [2]float32
+
+                                       //mt:if %s.Field == HUDWorldPos
+                                       WorldPos Pos
+
+                                       //mt:if %s.Field == HUDSize
+                                       Size [2]int32
+
+                                       //mt:if %s.Field == HUDZIndex
+                                       ZIndex uint32
+
+                                       //mt:if %s.Field == HUDText2
+                                       Text2 string
+                               }))(obj)).Align)[local186]
+                               write32(w, math.Float32bits(x))
+                       }
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDOffset {
+               for local187 := range (*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Offset {
+                       {
+                               x := ((*(*(struct {
+                                       ID HUDID
+
+                                       Field HUDField
+
+                                       //mt:if %s.Field == HUDPos
+                                       Pos [2]float32
+
+                                       //mt:if %s.Field == HUDName
+                                       Name string
+
+                                       //mt:if %s.Field == HUDScale
+                                       Scale [2]float32
+
+                                       //mt:if %s.Field == HUDText
+                                       Text string
+
+                                       //mt:if %s.Field == HUDNumber
+                                       Number uint32
+
+                                       //mt:if %s.Field == HUDItem
+                                       Item uint32
+
+                                       //mt:if %s.Field == HUDDir
+                                       Dir uint32
+
+                                       //mt:if %s.Field == HUDAlign
+                                       Align [2]float32
+
+                                       //mt:if %s.Field == HUDOffset
+                                       Offset [2]float32
+
+                                       //mt:if %s.Field == HUDWorldPos
+                                       WorldPos Pos
+
+                                       //mt:if %s.Field == HUDSize
+                                       Size [2]int32
+
+                                       //mt:if %s.Field == HUDZIndex
+                                       ZIndex uint32
+
+                                       //mt:if %s.Field == HUDText2
+                                       Text2 string
+                               }))(obj)).Offset)[local187]
+                               write32(w, math.Float32bits(x))
+                       }
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDWorldPos {
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).WorldPos).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDSize {
+               for local188 := range (*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Size {
+                       {
+                               x := ((*(*(struct {
+                                       ID HUDID
+
+                                       Field HUDField
+
+                                       //mt:if %s.Field == HUDPos
+                                       Pos [2]float32
+
+                                       //mt:if %s.Field == HUDName
+                                       Name string
+
+                                       //mt:if %s.Field == HUDScale
+                                       Scale [2]float32
+
+                                       //mt:if %s.Field == HUDText
+                                       Text string
+
+                                       //mt:if %s.Field == HUDNumber
+                                       Number uint32
+
+                                       //mt:if %s.Field == HUDItem
+                                       Item uint32
+
+                                       //mt:if %s.Field == HUDDir
+                                       Dir uint32
+
+                                       //mt:if %s.Field == HUDAlign
+                                       Align [2]float32
+
+                                       //mt:if %s.Field == HUDOffset
+                                       Offset [2]float32
+
+                                       //mt:if %s.Field == HUDWorldPos
+                                       WorldPos Pos
+
+                                       //mt:if %s.Field == HUDSize
+                                       Size [2]int32
+
+                                       //mt:if %s.Field == HUDZIndex
+                                       ZIndex uint32
+
+                                       //mt:if %s.Field == HUDText2
+                                       Text2 string
+                               }))(obj)).Size)[local188]
+                               write32(w, uint32(x))
+                       }
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDZIndex {
+               {
+                       x := (*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).ZIndex
+                       write32(w, uint32(x))
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDText2 {
+               if len(([]byte((*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Text2))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).Text2))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).Text2))[:])
+                       chk(err)
+               }
+       }
+}
+
+func (obj *ToCltChangeHUD) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).ID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDID", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Field).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDField", err))
+       }
+       if !((*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field < hudMax) {
+               chk(errors.New("assertion failed: %s.Field < hudMax"))
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDPos {
+               for local189 := range (*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Pos {
+                       {
+                               p := &((*(*(struct {
+                                       ID HUDID
+
+                                       Field HUDField
+
+                                       //mt:if %s.Field == HUDPos
+                                       Pos [2]float32
+
+                                       //mt:if %s.Field == HUDName
+                                       Name string
+
+                                       //mt:if %s.Field == HUDScale
+                                       Scale [2]float32
+
+                                       //mt:if %s.Field == HUDText
+                                       Text string
+
+                                       //mt:if %s.Field == HUDNumber
+                                       Number uint32
+
+                                       //mt:if %s.Field == HUDItem
+                                       Item uint32
+
+                                       //mt:if %s.Field == HUDDir
+                                       Dir uint32
+
+                                       //mt:if %s.Field == HUDAlign
+                                       Align [2]float32
+
+                                       //mt:if %s.Field == HUDOffset
+                                       Offset [2]float32
+
+                                       //mt:if %s.Field == HUDWorldPos
+                                       WorldPos Pos
+
+                                       //mt:if %s.Field == HUDSize
+                                       Size [2]int32
+
+                                       //mt:if %s.Field == HUDZIndex
+                                       ZIndex uint32
+
+                                       //mt:if %s.Field == HUDText2
+                                       Text2 string
+                               }))(obj)).Pos)[local189]
+                               *p = math.Float32frombits(read32(r))
+                       }
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDName {
+               var local190 []uint8
+               var local191 uint16
+               {
+                       p := &local191
+                       *p = read16(r)
+               }
+               (local190) = make([]uint8, local191)
+               {
+                       _, err := io.ReadFull(r, (local190)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Name) = string(local190)
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDScale {
+               for local192 := range (*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Scale {
+                       {
+                               p := &((*(*(struct {
+                                       ID HUDID
+
+                                       Field HUDField
+
+                                       //mt:if %s.Field == HUDPos
+                                       Pos [2]float32
+
+                                       //mt:if %s.Field == HUDName
+                                       Name string
+
+                                       //mt:if %s.Field == HUDScale
+                                       Scale [2]float32
+
+                                       //mt:if %s.Field == HUDText
+                                       Text string
+
+                                       //mt:if %s.Field == HUDNumber
+                                       Number uint32
+
+                                       //mt:if %s.Field == HUDItem
+                                       Item uint32
+
+                                       //mt:if %s.Field == HUDDir
+                                       Dir uint32
+
+                                       //mt:if %s.Field == HUDAlign
+                                       Align [2]float32
+
+                                       //mt:if %s.Field == HUDOffset
+                                       Offset [2]float32
+
+                                       //mt:if %s.Field == HUDWorldPos
+                                       WorldPos Pos
+
+                                       //mt:if %s.Field == HUDSize
+                                       Size [2]int32
+
+                                       //mt:if %s.Field == HUDZIndex
+                                       ZIndex uint32
+
+                                       //mt:if %s.Field == HUDText2
+                                       Text2 string
+                               }))(obj)).Scale)[local192]
+                               *p = math.Float32frombits(read32(r))
+                       }
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDText {
+               var local193 []uint8
+               var local194 uint16
+               {
+                       p := &local194
+                       *p = read16(r)
+               }
+               (local193) = make([]uint8, local194)
+               {
+                       _, err := io.ReadFull(r, (local193)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Text) = string(local193)
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDNumber {
+               {
+                       p := &(*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).Number
+                       *p = read32(r)
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDItem {
+               {
+                       p := &(*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).Item
+                       *p = read32(r)
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDDir {
+               {
+                       p := &(*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).Dir
+                       *p = read32(r)
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDAlign {
+               for local195 := range (*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Align {
+                       {
+                               p := &((*(*(struct {
+                                       ID HUDID
+
+                                       Field HUDField
+
+                                       //mt:if %s.Field == HUDPos
+                                       Pos [2]float32
+
+                                       //mt:if %s.Field == HUDName
+                                       Name string
+
+                                       //mt:if %s.Field == HUDScale
+                                       Scale [2]float32
+
+                                       //mt:if %s.Field == HUDText
+                                       Text string
+
+                                       //mt:if %s.Field == HUDNumber
+                                       Number uint32
+
+                                       //mt:if %s.Field == HUDItem
+                                       Item uint32
+
+                                       //mt:if %s.Field == HUDDir
+                                       Dir uint32
+
+                                       //mt:if %s.Field == HUDAlign
+                                       Align [2]float32
+
+                                       //mt:if %s.Field == HUDOffset
+                                       Offset [2]float32
+
+                                       //mt:if %s.Field == HUDWorldPos
+                                       WorldPos Pos
+
+                                       //mt:if %s.Field == HUDSize
+                                       Size [2]int32
+
+                                       //mt:if %s.Field == HUDZIndex
+                                       ZIndex uint32
+
+                                       //mt:if %s.Field == HUDText2
+                                       Text2 string
+                               }))(obj)).Align)[local195]
+                               *p = math.Float32frombits(read32(r))
+                       }
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDOffset {
+               for local196 := range (*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Offset {
+                       {
+                               p := &((*(*(struct {
+                                       ID HUDID
+
+                                       Field HUDField
+
+                                       //mt:if %s.Field == HUDPos
+                                       Pos [2]float32
+
+                                       //mt:if %s.Field == HUDName
+                                       Name string
+
+                                       //mt:if %s.Field == HUDScale
+                                       Scale [2]float32
+
+                                       //mt:if %s.Field == HUDText
+                                       Text string
+
+                                       //mt:if %s.Field == HUDNumber
+                                       Number uint32
+
+                                       //mt:if %s.Field == HUDItem
+                                       Item uint32
+
+                                       //mt:if %s.Field == HUDDir
+                                       Dir uint32
+
+                                       //mt:if %s.Field == HUDAlign
+                                       Align [2]float32
+
+                                       //mt:if %s.Field == HUDOffset
+                                       Offset [2]float32
+
+                                       //mt:if %s.Field == HUDWorldPos
+                                       WorldPos Pos
+
+                                       //mt:if %s.Field == HUDSize
+                                       Size [2]int32
+
+                                       //mt:if %s.Field == HUDZIndex
+                                       ZIndex uint32
+
+                                       //mt:if %s.Field == HUDText2
+                                       Text2 string
+                               }))(obj)).Offset)[local196]
+                               *p = math.Float32frombits(read32(r))
+                       }
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDWorldPos {
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).WorldPos).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDSize {
+               for local197 := range (*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Size {
+                       {
+                               p := &((*(*(struct {
+                                       ID HUDID
+
+                                       Field HUDField
+
+                                       //mt:if %s.Field == HUDPos
+                                       Pos [2]float32
+
+                                       //mt:if %s.Field == HUDName
+                                       Name string
+
+                                       //mt:if %s.Field == HUDScale
+                                       Scale [2]float32
+
+                                       //mt:if %s.Field == HUDText
+                                       Text string
+
+                                       //mt:if %s.Field == HUDNumber
+                                       Number uint32
+
+                                       //mt:if %s.Field == HUDItem
+                                       Item uint32
+
+                                       //mt:if %s.Field == HUDDir
+                                       Dir uint32
+
+                                       //mt:if %s.Field == HUDAlign
+                                       Align [2]float32
+
+                                       //mt:if %s.Field == HUDOffset
+                                       Offset [2]float32
+
+                                       //mt:if %s.Field == HUDWorldPos
+                                       WorldPos Pos
+
+                                       //mt:if %s.Field == HUDSize
+                                       Size [2]int32
+
+                                       //mt:if %s.Field == HUDZIndex
+                                       ZIndex uint32
+
+                                       //mt:if %s.Field == HUDText2
+                                       Text2 string
+                               }))(obj)).Size)[local197]
+                               *p = int32(read32(r))
+                       }
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDZIndex {
+               {
+                       p := &(*(*(struct {
+                               ID HUDID
+
+                               Field HUDField
+
+                               //mt:if %s.Field == HUDPos
+                               Pos [2]float32
+
+                               //mt:if %s.Field == HUDName
+                               Name string
+
+                               //mt:if %s.Field == HUDScale
+                               Scale [2]float32
+
+                               //mt:if %s.Field == HUDText
+                               Text string
+
+                               //mt:if %s.Field == HUDNumber
+                               Number uint32
+
+                               //mt:if %s.Field == HUDItem
+                               Item uint32
+
+                               //mt:if %s.Field == HUDDir
+                               Dir uint32
+
+                               //mt:if %s.Field == HUDAlign
+                               Align [2]float32
+
+                               //mt:if %s.Field == HUDOffset
+                               Offset [2]float32
+
+                               //mt:if %s.Field == HUDWorldPos
+                               WorldPos Pos
+
+                               //mt:if %s.Field == HUDSize
+                               Size [2]int32
+
+                               //mt:if %s.Field == HUDZIndex
+                               ZIndex uint32
+
+                               //mt:if %s.Field == HUDText2
+                               Text2 string
+                       }))(obj)).ZIndex
+                       *p = read32(r)
+               }
+       }
+       if (*(*(struct {
+               ID HUDID
+
+               Field HUDField
+
+               //mt:if %s.Field == HUDPos
+               Pos [2]float32
+
+               //mt:if %s.Field == HUDName
+               Name string
+
+               //mt:if %s.Field == HUDScale
+               Scale [2]float32
+
+               //mt:if %s.Field == HUDText
+               Text string
+
+               //mt:if %s.Field == HUDNumber
+               Number uint32
+
+               //mt:if %s.Field == HUDItem
+               Item uint32
+
+               //mt:if %s.Field == HUDDir
+               Dir uint32
+
+               //mt:if %s.Field == HUDAlign
+               Align [2]float32
+
+               //mt:if %s.Field == HUDOffset
+               Offset [2]float32
+
+               //mt:if %s.Field == HUDWorldPos
+               WorldPos Pos
+
+               //mt:if %s.Field == HUDSize
+               Size [2]int32
+
+               //mt:if %s.Field == HUDZIndex
+               ZIndex uint32
+
+               //mt:if %s.Field == HUDText2
+               Text2 string
+       }))(obj)).Field == HUDText2 {
+               var local198 []uint8
+               var local199 uint16
+               {
+                       p := &local199
+                       *p = read16(r)
+               }
+               (local198) = make([]uint8, local199)
+               {
+                       _, err := io.ReadFull(r, (local198)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       ID HUDID
+
+                       Field HUDField
+
+                       //mt:if %s.Field == HUDPos
+                       Pos [2]float32
+
+                       //mt:if %s.Field == HUDName
+                       Name string
+
+                       //mt:if %s.Field == HUDScale
+                       Scale [2]float32
+
+                       //mt:if %s.Field == HUDText
+                       Text string
+
+                       //mt:if %s.Field == HUDNumber
+                       Number uint32
+
+                       //mt:if %s.Field == HUDItem
+                       Item uint32
+
+                       //mt:if %s.Field == HUDDir
+                       Dir uint32
+
+                       //mt:if %s.Field == HUDAlign
+                       Align [2]float32
+
+                       //mt:if %s.Field == HUDOffset
+                       Offset [2]float32
+
+                       //mt:if %s.Field == HUDWorldPos
+                       WorldPos Pos
+
+                       //mt:if %s.Field == HUDSize
+                       Size [2]int32
+
+                       //mt:if %s.Field == HUDZIndex
+                       ZIndex uint32
+
+                       //mt:if %s.Field == HUDText2
+                       Text2 string
+               }))(obj)).Text2) = string(local198)
+       }
+}
+
+func (obj *ToCltHUDFlags) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       // &^= Mask
+                       // |= Flags
+                       Flags, Mask HUDFlags
+               }))(obj)).Flags).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDFlags", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       // &^= Mask
+                       // |= Flags
+                       Flags, Mask HUDFlags
+               }))(obj)).Mask).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDFlags", err))
+       }
+}
+
+func (obj *ToCltHUDFlags) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       // &^= Mask
+                       // |= Flags
+                       Flags, Mask HUDFlags
+               }))(obj)).Flags).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDFlags", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       // &^= Mask
+                       // |= Flags
+                       Flags, Mask HUDFlags
+               }))(obj)).Mask).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HUDFlags", err))
+       }
+}
+
+func (obj *ToCltSetHotbarParam) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Param HotbarParam
+
+                       //mt:if %s.Param == HotbarSize
+                       //mt:const uint16(4) // Size of Size field.
+                       Size int32
+
+                       //mt:if %s.Param != HotbarSize
+                       Img Texture
+               }))(obj)).Param).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HotbarParam", err))
+       }
+       if (*(*(struct {
+               Param HotbarParam
+
+               //mt:if %s.Param == HotbarSize
+               //mt:const uint16(4) // Size of Size field.
+               Size int32
+
+               //mt:if %s.Param != HotbarSize
+               Img Texture
+       }))(obj)).Param == HotbarSize {
+               {
+                       local200 := uint16(4) // Size of Size field.
+                       {
+                               x := local200
+                               write16(w, uint16(x))
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param HotbarParam
+
+                               //mt:if %s.Param == HotbarSize
+                               //mt:const uint16(4) // Size of Size field.
+                               Size int32
+
+                               //mt:if %s.Param != HotbarSize
+                               Img Texture
+                       }))(obj)).Size
+                       write32(w, uint32(x))
+               }
+       }
+       if (*(*(struct {
+               Param HotbarParam
+
+               //mt:if %s.Param == HotbarSize
+               //mt:const uint16(4) // Size of Size field.
+               Size int32
+
+               //mt:if %s.Param != HotbarSize
+               Img Texture
+       }))(obj)).Param != HotbarSize {
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param HotbarParam
+
+                               //mt:if %s.Param == HotbarSize
+                               //mt:const uint16(4) // Size of Size field.
+                               Size int32
+
+                               //mt:if %s.Param != HotbarSize
+                               Img Texture
+                       }))(obj)).Img).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+       }
+}
+
+func (obj *ToCltSetHotbarParam) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Param HotbarParam
+
+                       //mt:if %s.Param == HotbarSize
+                       //mt:const uint16(4) // Size of Size field.
+                       Size int32
+
+                       //mt:if %s.Param != HotbarSize
+                       Img Texture
+               }))(obj)).Param).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.HotbarParam", err))
+       }
+       if (*(*(struct {
+               Param HotbarParam
+
+               //mt:if %s.Param == HotbarSize
+               //mt:const uint16(4) // Size of Size field.
+               Size int32
+
+               //mt:if %s.Param != HotbarSize
+               Img Texture
+       }))(obj)).Param == HotbarSize {
+               {
+                       var local201 uint16
+                       {
+                               p := &local201
+                               *p = read16(r)
+                       }
+                       if local201 != (4) {
+                               chk(fmt.Errorf("const %v: %v", 4, local201))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param HotbarParam
+
+                               //mt:if %s.Param == HotbarSize
+                               //mt:const uint16(4) // Size of Size field.
+                               Size int32
+
+                               //mt:if %s.Param != HotbarSize
+                               Img Texture
+                       }))(obj)).Size
+                       *p = int32(read32(r))
+               }
+       }
+       if (*(*(struct {
+               Param HotbarParam
+
+               //mt:if %s.Param == HotbarSize
+               //mt:const uint16(4) // Size of Size field.
+               Size int32
+
+               //mt:if %s.Param != HotbarSize
+               Img Texture
+       }))(obj)).Param != HotbarSize {
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param HotbarParam
+
+                               //mt:if %s.Param == HotbarSize
+                               //mt:const uint16(4) // Size of Size field.
+                               Size int32
+
+                               //mt:if %s.Param != HotbarSize
+                               Img Texture
+                       }))(obj)).Img).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+       }
+}
+
+func (obj *ToCltBreath) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Breath uint16
+               }))(obj)).Breath
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *ToCltBreath) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Breath uint16
+               }))(obj)).Breath
+               *p = read16(r)
+       }
+}
+
+func (obj *ToCltSkyParams) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).BgColor
+               w.Write([]byte{x.A, x.R, x.G, x.B})
+       }
+       if len(([]byte((*(*(struct {
+               BgColor     color.NRGBA
+               Type        string
+               Clouds      bool
+               SunFogTint  color.NRGBA
+               MoonFogTint color.NRGBA
+               FogTintType string
+
+               //mt:if %s.Type == "skybox"
+               Textures []Texture
+
+               //mt:if %s.Type == "regular"
+               DaySky, DayHorizon,
+               DawnSky, DawnHorizon,
+               NightSky, NightHorizon,
+               Indoor color.NRGBA
+       }))(obj)).Type))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).Type))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).Type))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).Clouds
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).SunFogTint
+               w.Write([]byte{x.A, x.R, x.G, x.B})
+       }
+       {
+               x := (*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).MoonFogTint
+               w.Write([]byte{x.A, x.R, x.G, x.B})
+       }
+       if len(([]byte((*(*(struct {
+               BgColor     color.NRGBA
+               Type        string
+               Clouds      bool
+               SunFogTint  color.NRGBA
+               MoonFogTint color.NRGBA
+               FogTintType string
+
+               //mt:if %s.Type == "skybox"
+               Textures []Texture
+
+               //mt:if %s.Type == "regular"
+               DaySky, DayHorizon,
+               DawnSky, DawnHorizon,
+               NightSky, NightHorizon,
+               Indoor color.NRGBA
+       }))(obj)).FogTintType))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).FogTintType))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).FogTintType))[:])
+               chk(err)
+       }
+       if (*(*(struct {
+               BgColor     color.NRGBA
+               Type        string
+               Clouds      bool
+               SunFogTint  color.NRGBA
+               MoonFogTint color.NRGBA
+               FogTintType string
+
+               //mt:if %s.Type == "skybox"
+               Textures []Texture
+
+               //mt:if %s.Type == "regular"
+               DaySky, DayHorizon,
+               DawnSky, DawnHorizon,
+               NightSky, NightHorizon,
+               Indoor color.NRGBA
+       }))(obj)).Type == "skybox" {
+               if len(((*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).Textures)) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(((*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).Textures)))
+                       write16(w, uint16(x))
+               }
+               for local202 := range (*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).Textures {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       BgColor     color.NRGBA
+                                       Type        string
+                                       Clouds      bool
+                                       SunFogTint  color.NRGBA
+                                       MoonFogTint color.NRGBA
+                                       FogTintType string
+
+                                       //mt:if %s.Type == "skybox"
+                                       Textures []Texture
+
+                                       //mt:if %s.Type == "regular"
+                                       DaySky, DayHorizon,
+                                       DawnSky, DawnHorizon,
+                                       NightSky, NightHorizon,
+                                       Indoor color.NRGBA
+                               }))(obj)).Textures)[local202]).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+                       }
+               }
+       }
+       if (*(*(struct {
+               BgColor     color.NRGBA
+               Type        string
+               Clouds      bool
+               SunFogTint  color.NRGBA
+               MoonFogTint color.NRGBA
+               FogTintType string
+
+               //mt:if %s.Type == "skybox"
+               Textures []Texture
+
+               //mt:if %s.Type == "regular"
+               DaySky, DayHorizon,
+               DawnSky, DawnHorizon,
+               NightSky, NightHorizon,
+               Indoor color.NRGBA
+       }))(obj)).Type == "regular" {
+               {
+                       x := (*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).DaySky
+                       w.Write([]byte{x.A, x.R, x.G, x.B})
+               }
+               {
+                       x := (*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).DayHorizon
+                       w.Write([]byte{x.A, x.R, x.G, x.B})
+               }
+               {
+                       x := (*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).DawnSky
+                       w.Write([]byte{x.A, x.R, x.G, x.B})
+               }
+               {
+                       x := (*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).DawnHorizon
+                       w.Write([]byte{x.A, x.R, x.G, x.B})
+               }
+               {
+                       x := (*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).NightSky
+                       w.Write([]byte{x.A, x.R, x.G, x.B})
+               }
+               {
+                       x := (*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).NightHorizon
+                       w.Write([]byte{x.A, x.R, x.G, x.B})
+               }
+               {
+                       x := (*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).Indoor
+                       w.Write([]byte{x.A, x.R, x.G, x.B})
+               }
+       }
+}
+
+func (obj *ToCltSkyParams) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).BgColor
+               *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+       }
+       var local203 []uint8
+       var local204 uint16
+       {
+               p := &local204
+               *p = read16(r)
+       }
+       (local203) = make([]uint8, local204)
+       {
+               _, err := io.ReadFull(r, (local203)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               BgColor     color.NRGBA
+               Type        string
+               Clouds      bool
+               SunFogTint  color.NRGBA
+               MoonFogTint color.NRGBA
+               FogTintType string
+
+               //mt:if %s.Type == "skybox"
+               Textures []Texture
+
+               //mt:if %s.Type == "regular"
+               DaySky, DayHorizon,
+               DawnSky, DawnHorizon,
+               NightSky, NightHorizon,
+               Indoor color.NRGBA
+       }))(obj)).Type) = string(local203)
+       {
+               p := &(*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).Clouds
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).SunFogTint
+               *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+       }
+       {
+               p := &(*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).MoonFogTint
+               *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+       }
+       var local205 []uint8
+       var local206 uint16
+       {
+               p := &local206
+               *p = read16(r)
+       }
+       (local205) = make([]uint8, local206)
+       {
+               _, err := io.ReadFull(r, (local205)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               BgColor     color.NRGBA
+               Type        string
+               Clouds      bool
+               SunFogTint  color.NRGBA
+               MoonFogTint color.NRGBA
+               FogTintType string
+
+               //mt:if %s.Type == "skybox"
+               Textures []Texture
+
+               //mt:if %s.Type == "regular"
+               DaySky, DayHorizon,
+               DawnSky, DawnHorizon,
+               NightSky, NightHorizon,
+               Indoor color.NRGBA
+       }))(obj)).FogTintType) = string(local205)
+       if (*(*(struct {
+               BgColor     color.NRGBA
+               Type        string
+               Clouds      bool
+               SunFogTint  color.NRGBA
+               MoonFogTint color.NRGBA
+               FogTintType string
+
+               //mt:if %s.Type == "skybox"
+               Textures []Texture
+
+               //mt:if %s.Type == "regular"
+               DaySky, DayHorizon,
+               DawnSky, DawnHorizon,
+               NightSky, NightHorizon,
+               Indoor color.NRGBA
+       }))(obj)).Type == "skybox" {
+               var local207 uint16
+               {
+                       p := &local207
+                       *p = read16(r)
+               }
+               ((*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).Textures) = make([]Texture, local207)
+               for local208 := range (*(*(struct {
+                       BgColor     color.NRGBA
+                       Type        string
+                       Clouds      bool
+                       SunFogTint  color.NRGBA
+                       MoonFogTint color.NRGBA
+                       FogTintType string
+
+                       //mt:if %s.Type == "skybox"
+                       Textures []Texture
+
+                       //mt:if %s.Type == "regular"
+                       DaySky, DayHorizon,
+                       DawnSky, DawnHorizon,
+                       NightSky, NightHorizon,
+                       Indoor color.NRGBA
+               }))(obj)).Textures {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       BgColor     color.NRGBA
+                                       Type        string
+                                       Clouds      bool
+                                       SunFogTint  color.NRGBA
+                                       MoonFogTint color.NRGBA
+                                       FogTintType string
+
+                                       //mt:if %s.Type == "skybox"
+                                       Textures []Texture
+
+                                       //mt:if %s.Type == "regular"
+                                       DaySky, DayHorizon,
+                                       DawnSky, DawnHorizon,
+                                       NightSky, NightHorizon,
+                                       Indoor color.NRGBA
+                               }))(obj)).Textures)[local208]).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+                       }
+               }
+       }
+       if (*(*(struct {
+               BgColor     color.NRGBA
+               Type        string
+               Clouds      bool
+               SunFogTint  color.NRGBA
+               MoonFogTint color.NRGBA
+               FogTintType string
+
+               //mt:if %s.Type == "skybox"
+               Textures []Texture
+
+               //mt:if %s.Type == "regular"
+               DaySky, DayHorizon,
+               DawnSky, DawnHorizon,
+               NightSky, NightHorizon,
+               Indoor color.NRGBA
+       }))(obj)).Type == "regular" {
+               {
+                       p := &(*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).DaySky
+                       *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+               }
+               {
+                       p := &(*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).DayHorizon
+                       *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+               }
+               {
+                       p := &(*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).DawnSky
+                       *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+               }
+               {
+                       p := &(*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).DawnHorizon
+                       *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+               }
+               {
+                       p := &(*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).NightSky
+                       *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+               }
+               {
+                       p := &(*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).NightHorizon
+                       *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+               }
+               {
+                       p := &(*(*(struct {
+                               BgColor     color.NRGBA
+                               Type        string
+                               Clouds      bool
+                               SunFogTint  color.NRGBA
+                               MoonFogTint color.NRGBA
+                               FogTintType string
+
+                               //mt:if %s.Type == "skybox"
+                               Textures []Texture
+
+                               //mt:if %s.Type == "regular"
+                               DaySky, DayHorizon,
+                               DawnSky, DawnHorizon,
+                               NightSky, NightHorizon,
+                               Indoor color.NRGBA
+                       }))(obj)).Indoor
+                       *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+               }
+       }
+}
+
+func (obj *ToCltOverrideDayNightRatio) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Override bool
+                       Ratio    uint16
+               }))(obj)).Override
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Override bool
+                       Ratio    uint16
+               }))(obj)).Ratio
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *ToCltOverrideDayNightRatio) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Override bool
+                       Ratio    uint16
+               }))(obj)).Override
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Override bool
+                       Ratio    uint16
+               }))(obj)).Ratio
+               *p = read16(r)
+       }
+}
+
+func (obj *ToCltLocalPlayerAnim) serialize(w io.Writer) {
+       for local209 := range (*(*(struct {
+               Idle, Walk, Dig, WalkDig [2]int32
+               Speed                    float32
+       }))(obj)).Idle {
+               {
+                       x := ((*(*(struct {
+                               Idle, Walk, Dig, WalkDig [2]int32
+                               Speed                    float32
+                       }))(obj)).Idle)[local209]
+                       write32(w, uint32(x))
+               }
+       }
+       for local210 := range (*(*(struct {
+               Idle, Walk, Dig, WalkDig [2]int32
+               Speed                    float32
+       }))(obj)).Walk {
+               {
+                       x := ((*(*(struct {
+                               Idle, Walk, Dig, WalkDig [2]int32
+                               Speed                    float32
+                       }))(obj)).Walk)[local210]
+                       write32(w, uint32(x))
+               }
+       }
+       for local211 := range (*(*(struct {
+               Idle, Walk, Dig, WalkDig [2]int32
+               Speed                    float32
+       }))(obj)).Dig {
+               {
+                       x := ((*(*(struct {
+                               Idle, Walk, Dig, WalkDig [2]int32
+                               Speed                    float32
+                       }))(obj)).Dig)[local211]
+                       write32(w, uint32(x))
+               }
+       }
+       for local212 := range (*(*(struct {
+               Idle, Walk, Dig, WalkDig [2]int32
+               Speed                    float32
+       }))(obj)).WalkDig {
+               {
+                       x := ((*(*(struct {
+                               Idle, Walk, Dig, WalkDig [2]int32
+                               Speed                    float32
+                       }))(obj)).WalkDig)[local212]
+                       write32(w, uint32(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Idle, Walk, Dig, WalkDig [2]int32
+                       Speed                    float32
+               }))(obj)).Speed
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *ToCltLocalPlayerAnim) deserialize(r io.Reader) {
+       for local213 := range (*(*(struct {
+               Idle, Walk, Dig, WalkDig [2]int32
+               Speed                    float32
+       }))(obj)).Idle {
+               {
+                       p := &((*(*(struct {
+                               Idle, Walk, Dig, WalkDig [2]int32
+                               Speed                    float32
+                       }))(obj)).Idle)[local213]
+                       *p = int32(read32(r))
+               }
+       }
+       for local214 := range (*(*(struct {
+               Idle, Walk, Dig, WalkDig [2]int32
+               Speed                    float32
+       }))(obj)).Walk {
+               {
+                       p := &((*(*(struct {
+                               Idle, Walk, Dig, WalkDig [2]int32
+                               Speed                    float32
+                       }))(obj)).Walk)[local214]
+                       *p = int32(read32(r))
+               }
+       }
+       for local215 := range (*(*(struct {
+               Idle, Walk, Dig, WalkDig [2]int32
+               Speed                    float32
+       }))(obj)).Dig {
+               {
+                       p := &((*(*(struct {
+                               Idle, Walk, Dig, WalkDig [2]int32
+                               Speed                    float32
+                       }))(obj)).Dig)[local215]
+                       *p = int32(read32(r))
+               }
+       }
+       for local216 := range (*(*(struct {
+               Idle, Walk, Dig, WalkDig [2]int32
+               Speed                    float32
+       }))(obj)).WalkDig {
+               {
+                       p := &((*(*(struct {
+                               Idle, Walk, Dig, WalkDig [2]int32
+                               Speed                    float32
+                       }))(obj)).WalkDig)[local216]
+                       *p = int32(read32(r))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Idle, Walk, Dig, WalkDig [2]int32
+                       Speed                    float32
+               }))(obj)).Speed
+               *p = math.Float32frombits(read32(r))
+       }
+}
+
+func (obj *ToCltEyeOffset) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       First, Third Vec
+               }))(obj)).First).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       First, Third Vec
+               }))(obj)).Third).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+}
+
+func (obj *ToCltEyeOffset) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       First, Third Vec
+               }))(obj)).First).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       First, Third Vec
+               }))(obj)).Third).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+}
+
+func (obj *ToCltDelParticleSpawner) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID ParticleSpawnerID
+               }))(obj)).ID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ParticleSpawnerID", err))
+       }
+}
+
+func (obj *ToCltDelParticleSpawner) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID ParticleSpawnerID
+               }))(obj)).ID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ParticleSpawnerID", err))
+       }
+}
+
+func (obj *ToCltCloudParams) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Density      float32
+                       DiffuseColor color.NRGBA
+                       AmbientColor color.NRGBA
+                       Height       float32
+                       Thickness    float32
+                       Speed        [2]float32
+               }))(obj)).Density
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Density      float32
+                       DiffuseColor color.NRGBA
+                       AmbientColor color.NRGBA
+                       Height       float32
+                       Thickness    float32
+                       Speed        [2]float32
+               }))(obj)).DiffuseColor
+               w.Write([]byte{x.A, x.R, x.G, x.B})
+       }
+       {
+               x := (*(*(struct {
+                       Density      float32
+                       DiffuseColor color.NRGBA
+                       AmbientColor color.NRGBA
+                       Height       float32
+                       Thickness    float32
+                       Speed        [2]float32
+               }))(obj)).AmbientColor
+               w.Write([]byte{x.A, x.R, x.G, x.B})
+       }
+       {
+               x := (*(*(struct {
+                       Density      float32
+                       DiffuseColor color.NRGBA
+                       AmbientColor color.NRGBA
+                       Height       float32
+                       Thickness    float32
+                       Speed        [2]float32
+               }))(obj)).Height
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Density      float32
+                       DiffuseColor color.NRGBA
+                       AmbientColor color.NRGBA
+                       Height       float32
+                       Thickness    float32
+                       Speed        [2]float32
+               }))(obj)).Thickness
+               write32(w, math.Float32bits(x))
+       }
+       for local217 := range (*(*(struct {
+               Density      float32
+               DiffuseColor color.NRGBA
+               AmbientColor color.NRGBA
+               Height       float32
+               Thickness    float32
+               Speed        [2]float32
+       }))(obj)).Speed {
+               {
+                       x := ((*(*(struct {
+                               Density      float32
+                               DiffuseColor color.NRGBA
+                               AmbientColor color.NRGBA
+                               Height       float32
+                               Thickness    float32
+                               Speed        [2]float32
+                       }))(obj)).Speed)[local217]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+}
+
+func (obj *ToCltCloudParams) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Density      float32
+                       DiffuseColor color.NRGBA
+                       AmbientColor color.NRGBA
+                       Height       float32
+                       Thickness    float32
+                       Speed        [2]float32
+               }))(obj)).Density
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Density      float32
+                       DiffuseColor color.NRGBA
+                       AmbientColor color.NRGBA
+                       Height       float32
+                       Thickness    float32
+                       Speed        [2]float32
+               }))(obj)).DiffuseColor
+               *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+       }
+       {
+               p := &(*(*(struct {
+                       Density      float32
+                       DiffuseColor color.NRGBA
+                       AmbientColor color.NRGBA
+                       Height       float32
+                       Thickness    float32
+                       Speed        [2]float32
+               }))(obj)).AmbientColor
+               *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+       }
+       {
+               p := &(*(*(struct {
+                       Density      float32
+                       DiffuseColor color.NRGBA
+                       AmbientColor color.NRGBA
+                       Height       float32
+                       Thickness    float32
+                       Speed        [2]float32
+               }))(obj)).Height
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Density      float32
+                       DiffuseColor color.NRGBA
+                       AmbientColor color.NRGBA
+                       Height       float32
+                       Thickness    float32
+                       Speed        [2]float32
+               }))(obj)).Thickness
+               *p = math.Float32frombits(read32(r))
+       }
+       for local218 := range (*(*(struct {
+               Density      float32
+               DiffuseColor color.NRGBA
+               AmbientColor color.NRGBA
+               Height       float32
+               Thickness    float32
+               Speed        [2]float32
+       }))(obj)).Speed {
+               {
+                       p := &((*(*(struct {
+                               Density      float32
+                               DiffuseColor color.NRGBA
+                               AmbientColor color.NRGBA
+                               Height       float32
+                               Thickness    float32
+                               Speed        [2]float32
+                       }))(obj)).Speed)[local218]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+}
+
+func (obj *ToCltFadeSound) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID   SoundID
+                       Step float32
+                       Gain float32
+               }))(obj)).ID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundID", err))
+       }
+       {
+               x := (*(*(struct {
+                       ID   SoundID
+                       Step float32
+                       Gain float32
+               }))(obj)).Step
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       ID   SoundID
+                       Step float32
+                       Gain float32
+               }))(obj)).Gain
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *ToCltFadeSound) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID   SoundID
+                       Step float32
+                       Gain float32
+               }))(obj)).ID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundID", err))
+       }
+       {
+               p := &(*(*(struct {
+                       ID   SoundID
+                       Step float32
+                       Gain float32
+               }))(obj)).Step
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       ID   SoundID
+                       Step float32
+                       Gain float32
+               }))(obj)).Gain
+               *p = math.Float32frombits(read32(r))
+       }
+}
+
+func (obj *ToCltUpdatePlayerList) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Type    PlayerListUpdateType
+                       Players []string
+               }))(obj)).Type).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.PlayerListUpdateType", err))
+       }
+       if len(((*(*(struct {
+               Type    PlayerListUpdateType
+               Players []string
+       }))(obj)).Players)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Type    PlayerListUpdateType
+                       Players []string
+               }))(obj)).Players)))
+               write16(w, uint16(x))
+       }
+       for local219 := range (*(*(struct {
+               Type    PlayerListUpdateType
+               Players []string
+       }))(obj)).Players {
+               if len(([]byte(((*(*(struct {
+                       Type    PlayerListUpdateType
+                       Players []string
+               }))(obj)).Players)[local219]))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte(((*(*(struct {
+                               Type    PlayerListUpdateType
+                               Players []string
+                       }))(obj)).Players)[local219]))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte(((*(*(struct {
+                               Type    PlayerListUpdateType
+                               Players []string
+                       }))(obj)).Players)[local219]))[:])
+                       chk(err)
+               }
+       }
+}
+
+func (obj *ToCltUpdatePlayerList) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Type    PlayerListUpdateType
+                       Players []string
+               }))(obj)).Type).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.PlayerListUpdateType", err))
+       }
+       var local220 uint16
+       {
+               p := &local220
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Type    PlayerListUpdateType
+               Players []string
+       }))(obj)).Players) = make([]string, local220)
+       for local221 := range (*(*(struct {
+               Type    PlayerListUpdateType
+               Players []string
+       }))(obj)).Players {
+               var local222 []uint8
+               var local223 uint16
+               {
+                       p := &local223
+                       *p = read16(r)
+               }
+               (local222) = make([]uint8, local223)
+               {
+                       _, err := io.ReadFull(r, (local222)[:])
+                       chk(err)
+               }
+               (((*(*(struct {
+                       Type    PlayerListUpdateType
+                       Players []string
+               }))(obj)).Players)[local221]) = string(local222)
+       }
+}
+
+func (obj *ToCltModChanMsg) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Channel string
+               Sender  string
+               Msg     string
+       }))(obj)).Channel))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Channel string
+                       Sender  string
+                       Msg     string
+               }))(obj)).Channel))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Channel string
+                       Sender  string
+                       Msg     string
+               }))(obj)).Channel))[:])
+               chk(err)
+       }
+       if len(([]byte((*(*(struct {
+               Channel string
+               Sender  string
+               Msg     string
+       }))(obj)).Sender))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Channel string
+                       Sender  string
+                       Msg     string
+               }))(obj)).Sender))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Channel string
+                       Sender  string
+                       Msg     string
+               }))(obj)).Sender))[:])
+               chk(err)
+       }
+       if len(([]byte((*(*(struct {
+               Channel string
+               Sender  string
+               Msg     string
+       }))(obj)).Msg))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Channel string
+                       Sender  string
+                       Msg     string
+               }))(obj)).Msg))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Channel string
+                       Sender  string
+                       Msg     string
+               }))(obj)).Msg))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltModChanMsg) deserialize(r io.Reader) {
+       var local224 []uint8
+       var local225 uint16
+       {
+               p := &local225
+               *p = read16(r)
+       }
+       (local224) = make([]uint8, local225)
+       {
+               _, err := io.ReadFull(r, (local224)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Channel string
+               Sender  string
+               Msg     string
+       }))(obj)).Channel) = string(local224)
+       var local226 []uint8
+       var local227 uint16
+       {
+               p := &local227
+               *p = read16(r)
+       }
+       (local226) = make([]uint8, local227)
+       {
+               _, err := io.ReadFull(r, (local226)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Channel string
+               Sender  string
+               Msg     string
+       }))(obj)).Sender) = string(local226)
+       var local228 []uint8
+       var local229 uint16
+       {
+               p := &local229
+               *p = read16(r)
+       }
+       (local228) = make([]uint8, local229)
+       {
+               _, err := io.ReadFull(r, (local228)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Channel string
+               Sender  string
+               Msg     string
+       }))(obj)).Msg) = string(local228)
+}
+
+func (obj *ToCltModChanSig) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Signal  ModChanSig
+                       Channel string
+               }))(obj)).Signal).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ModChanSig", err))
+       }
+       if len(([]byte((*(*(struct {
+               Signal  ModChanSig
+               Channel string
+       }))(obj)).Channel))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Signal  ModChanSig
+                       Channel string
+               }))(obj)).Channel))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Signal  ModChanSig
+                       Channel string
+               }))(obj)).Channel))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltModChanSig) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Signal  ModChanSig
+                       Channel string
+               }))(obj)).Signal).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ModChanSig", err))
+       }
+       var local230 []uint8
+       var local231 uint16
+       {
+               p := &local231
+               *p = read16(r)
+       }
+       (local230) = make([]uint8, local231)
+       {
+               _, err := io.ReadFull(r, (local230)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Signal  ModChanSig
+               Channel string
+       }))(obj)).Channel) = string(local230)
+}
+
+func (obj *ToCltNodeMetasChanged) serialize(w io.Writer) {
+       {
+               ow := w
+               w := new(bytes.Buffer)
+               {
+                       x := (*(*(struct {
+                               //mt:lenhdr 32
+                               Changed map[[3]int16]*NodeMeta
+                       }))(obj)).Changed
+                       {
+                               w := zlib.NewWriter(w)
+                               if x == nil {
+                                       write8(w, 0)
+                               } else {
+                                       write8(w, 2)
+                                       if len(x) > math.MaxUint16 {
+                                               chk(ErrTooLong)
+                                       }
+                                       write16(w, uint16(len(x)))
+                                       keys := make([][3]int16, 0, len(x))
+                                       for key := range x {
+                                               keys = append(keys, key)
+                                       }
+                                       sort.Slice(keys, func(i, j int) bool {
+                                               p, q := keys[i], keys[j]
+                                               for i := range p {
+                                                       switch {
+                                                       case p[i] < q[i]:
+                                                               return true
+                                                       case p[i] > q[i]:
+                                                               return false
+                                                       }
+                                               }
+                                               return false
+                                       })
+                                       for _, key := range keys {
+                                               for _, n := range key {
+                                                       write16(w, uint16(n))
+                                               }
+                                               chk(serialize(w, x[key]))
+                                       }
+                               }
+                               chk(w.Close())
+                       }
+               }
+               {
+                       buf := w
+                       w := ow
+                       if len((buf.Bytes())) > math.MaxUint32 {
+                               chk(ErrTooLong)
+                       }
+                       {
+                               x := uint32(len((buf.Bytes())))
+                               write32(w, uint32(x))
+                       }
+                       {
+                               _, err := w.Write((buf.Bytes())[:])
+                               chk(err)
+                       }
+               }
+       }
+}
+
+func (obj *ToCltNodeMetasChanged) deserialize(r io.Reader) {
+       {
+               var n uint32
+               {
+                       p := &n
+                       *p = read32(r)
+               }
+               r := &io.LimitedReader{r, int64(n)}
+               {
+                       p := &(*(*(struct {
+                               //mt:lenhdr 32
+                               Changed map[[3]int16]*NodeMeta
+                       }))(obj)).Changed
+                       {
+                               r, err := zlib.NewReader(byteReader{r})
+                               chk(err)
+                               switch ver := read8(r); ver {
+                               case 0:
+                                       *p = nil
+                               case 2:
+                                       n := read16(r)
+                                       *p = make(map[[3]int16]*NodeMeta, n)
+                                       for ; n > 0; n-- {
+                                               var pos [3]int16
+                                               for i := range pos {
+                                                       pos[i] = int16(read16(r))
+                                               }
+                                               nm := new(NodeMeta)
+                                               chk(deserialize(r, nm))
+                                               (*p)[pos] = nm
+                                       }
+                               default:
+                                       chk(fmt.Errorf("unsupported nodemetas version: %d", ver))
+                               }
+                               chk(r.Close())
+                       }
+               }
+               if r.N > 0 {
+                       chk(fmt.Errorf("%d bytes of trailing data", r.N))
+               }
+       }
+}
+
+func (obj *ToCltSunParams) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Rise    Texture
+                       Rising  bool
+                       Size    float32
+               }))(obj)).Visible
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Rise    Texture
+                       Rising  bool
+                       Size    float32
+               }))(obj)).Texture).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Rise    Texture
+                       Rising  bool
+                       Size    float32
+               }))(obj)).ToneMap).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Rise    Texture
+                       Rising  bool
+                       Size    float32
+               }))(obj)).Rise).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       {
+               x := (*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Rise    Texture
+                       Rising  bool
+                       Size    float32
+               }))(obj)).Rising
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Rise    Texture
+                       Rising  bool
+                       Size    float32
+               }))(obj)).Size
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *ToCltSunParams) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Rise    Texture
+                       Rising  bool
+                       Size    float32
+               }))(obj)).Visible
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Rise    Texture
+                       Rising  bool
+                       Size    float32
+               }))(obj)).Texture).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Rise    Texture
+                       Rising  bool
+                       Size    float32
+               }))(obj)).ToneMap).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Rise    Texture
+                       Rising  bool
+                       Size    float32
+               }))(obj)).Rise).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Rise    Texture
+                       Rising  bool
+                       Size    float32
+               }))(obj)).Rising
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Rise    Texture
+                       Rising  bool
+                       Size    float32
+               }))(obj)).Size
+               *p = math.Float32frombits(read32(r))
+       }
+}
+
+func (obj *ToCltMoonParams) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Size    float32
+               }))(obj)).Visible
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Size    float32
+               }))(obj)).Texture).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Size    float32
+               }))(obj)).ToneMap).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       {
+               x := (*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Size    float32
+               }))(obj)).Size
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *ToCltMoonParams) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Size    float32
+               }))(obj)).Visible
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Size    float32
+               }))(obj)).Texture).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Size    float32
+               }))(obj)).ToneMap).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Visible bool
+                       Texture
+                       ToneMap Texture
+                       Size    float32
+               }))(obj)).Size
+               *p = math.Float32frombits(read32(r))
+       }
+}
+
+func (obj *ToCltStarParams) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Visible bool
+                       Count   uint32
+                       Color   color.NRGBA
+                       Size    float32
+               }))(obj)).Visible
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Visible bool
+                       Count   uint32
+                       Color   color.NRGBA
+                       Size    float32
+               }))(obj)).Count
+               write32(w, uint32(x))
+       }
+       {
+               x := (*(*(struct {
+                       Visible bool
+                       Count   uint32
+                       Color   color.NRGBA
+                       Size    float32
+               }))(obj)).Color
+               w.Write([]byte{x.A, x.R, x.G, x.B})
+       }
+       {
+               x := (*(*(struct {
+                       Visible bool
+                       Count   uint32
+                       Color   color.NRGBA
+                       Size    float32
+               }))(obj)).Size
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *ToCltStarParams) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Visible bool
+                       Count   uint32
+                       Color   color.NRGBA
+                       Size    float32
+               }))(obj)).Visible
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Visible bool
+                       Count   uint32
+                       Color   color.NRGBA
+                       Size    float32
+               }))(obj)).Count
+               *p = read32(r)
+       }
+       {
+               p := &(*(*(struct {
+                       Visible bool
+                       Count   uint32
+                       Color   color.NRGBA
+                       Size    float32
+               }))(obj)).Color
+               *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+       }
+       {
+               p := &(*(*(struct {
+                       Visible bool
+                       Count   uint32
+                       Color   color.NRGBA
+                       Size    float32
+               }))(obj)).Size
+               *p = math.Float32frombits(read32(r))
+       }
+}
+
+func (obj *ToCltSRPBytesSaltB) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               Salt, B []byte
+       }))(obj)).Salt)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Salt, B []byte
+               }))(obj)).Salt)))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(((*(*(struct {
+                       Salt, B []byte
+               }))(obj)).Salt)[:])
+               chk(err)
+       }
+       if len(((*(*(struct {
+               Salt, B []byte
+       }))(obj)).B)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Salt, B []byte
+               }))(obj)).B)))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(((*(*(struct {
+                       Salt, B []byte
+               }))(obj)).B)[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltSRPBytesSaltB) deserialize(r io.Reader) {
+       var local232 uint16
+       {
+               p := &local232
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Salt, B []byte
+       }))(obj)).Salt) = make([]byte, local232)
+       {
+               _, err := io.ReadFull(r, ((*(*(struct {
+                       Salt, B []byte
+               }))(obj)).Salt)[:])
+               chk(err)
+       }
+       var local233 uint16
+       {
+               p := &local233
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Salt, B []byte
+       }))(obj)).B) = make([]byte, local233)
+       {
+               _, err := io.ReadFull(r, ((*(*(struct {
+                       Salt, B []byte
+               }))(obj)).B)[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltFormspecPrepend) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Prepend string
+       }))(obj)).Prepend))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Prepend string
+               }))(obj)).Prepend))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Prepend string
+               }))(obj)).Prepend))[:])
+               chk(err)
+       }
+}
+
+func (obj *ToCltFormspecPrepend) deserialize(r io.Reader) {
+       var local234 []uint8
+       var local235 uint16
+       {
+               p := &local235
+               *p = read16(r)
+       }
+       (local234) = make([]uint8, local235)
+       {
+               _, err := io.ReadFull(r, (local234)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Prepend string
+       }))(obj)).Prepend) = string(local234)
+}
+
+func (obj *AOCmdProps) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Props AOProps
+               }))(obj)).Props).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOProps", err))
+       }
+}
+
+func (obj *AOCmdProps) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Props AOProps
+               }))(obj)).Props).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOProps", err))
+       }
+}
+
+func (obj *AOCmdPos) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos AOPos
+               }))(obj)).Pos).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOPos", err))
+       }
+}
+
+func (obj *AOCmdPos) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos AOPos
+               }))(obj)).Pos).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOPos", err))
+       }
+}
+
+func (obj *AOCmdTextureMod) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Mod Texture // suffix
+               }))(obj)).Mod).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+}
+
+func (obj *AOCmdTextureMod) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Mod Texture // suffix
+               }))(obj)).Mod).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+}
+
+func (obj *AOCmdSprite) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Sprite AOSprite
+               }))(obj)).Sprite).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOSprite", err))
+       }
+}
+
+func (obj *AOCmdSprite) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Sprite AOSprite
+               }))(obj)).Sprite).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOSprite", err))
+       }
+}
+
+func (obj *AOCmdHP) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       HP uint16
+               }))(obj)).HP
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *AOCmdHP) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       HP uint16
+               }))(obj)).HP
+               *p = read16(r)
+       }
+}
+
+func (obj *AOCmdArmorGroups) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               Armor []Group
+       }))(obj)).Armor)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Armor []Group
+               }))(obj)).Armor)))
+               write16(w, uint16(x))
+       }
+       for local236 := range (*(*(struct {
+               Armor []Group
+       }))(obj)).Armor {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Armor []Group
+                       }))(obj)).Armor)[local236]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Group", err))
+               }
+       }
+}
+
+func (obj *AOCmdArmorGroups) deserialize(r io.Reader) {
+       var local237 uint16
+       {
+               p := &local237
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Armor []Group
+       }))(obj)).Armor) = make([]Group, local237)
+       for local238 := range (*(*(struct {
+               Armor []Group
+       }))(obj)).Armor {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Armor []Group
+                       }))(obj)).Armor)[local238]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Group", err))
+               }
+       }
+}
+
+func (obj *AOCmdAnim) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Anim AOAnim
+               }))(obj)).Anim).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOAnim", err))
+       }
+}
+
+func (obj *AOCmdAnim) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Anim AOAnim
+               }))(obj)).Anim).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOAnim", err))
+       }
+}
+
+func (obj *AOCmdBonePos) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Bone string
+               Pos  AOBonePos
+       }))(obj)).Bone))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Bone string
+                       Pos  AOBonePos
+               }))(obj)).Bone))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Bone string
+                       Pos  AOBonePos
+               }))(obj)).Bone))[:])
+               chk(err)
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Bone string
+                       Pos  AOBonePos
+               }))(obj)).Pos).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOBonePos", err))
+       }
+}
+
+func (obj *AOCmdBonePos) deserialize(r io.Reader) {
+       var local239 []uint8
+       var local240 uint16
+       {
+               p := &local240
+               *p = read16(r)
+       }
+       (local239) = make([]uint8, local240)
+       {
+               _, err := io.ReadFull(r, (local239)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Bone string
+               Pos  AOBonePos
+       }))(obj)).Bone) = string(local239)
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Bone string
+                       Pos  AOBonePos
+               }))(obj)).Pos).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOBonePos", err))
+       }
+}
+
+func (obj *AOCmdAttach) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Attach AOAttach
+               }))(obj)).Attach).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOAttach", err))
+       }
+}
+
+func (obj *AOCmdAttach) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Attach AOAttach
+               }))(obj)).Attach).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOAttach", err))
+       }
+}
+
+func (obj *AOCmdPhysOverride) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Phys AOPhysOverride
+               }))(obj)).Phys).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOPhysOverride", err))
+       }
+}
+
+func (obj *AOCmdPhysOverride) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Phys AOPhysOverride
+               }))(obj)).Phys).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOPhysOverride", err))
+       }
+}
+
+func (obj *AOCmdSpawnInfant) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID AOID
+               }))(obj)).ID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+       {
+               local241 := genericCAO
+               if err := pcall(func() {
+                       (local241).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.aoType", err))
+               }
+       }
+}
+
+func (obj *AOCmdSpawnInfant) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID AOID
+               }))(obj)).ID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+       {
+               var local242 aoType
+               if err := pcall(func() {
+                       (local242).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.aoType", err))
+               }
+               if local242 != (101) {
+                       chk(fmt.Errorf("const %v: %v", 101, local242))
+               }
+       }
+}
+
+func (obj *AOCmdAnimSpeed) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Speed float32
+               }))(obj)).Speed
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *AOCmdAnimSpeed) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Speed float32
+               }))(obj)).Speed
+               *p = math.Float32frombits(read32(r))
+       }
+}
+
+func (obj *NodeMeta) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               //mt:len32
+               Fields []NodeMetaField
+
+               Inv Inv
+       }))(obj)).Fields)) > math.MaxUint32 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint32(len(((*(*(struct {
+                       //mt:len32
+                       Fields []NodeMetaField
+
+                       Inv Inv
+               }))(obj)).Fields)))
+               write32(w, uint32(x))
+       }
+       for local243 := range (*(*(struct {
+               //mt:len32
+               Fields []NodeMetaField
+
+               Inv Inv
+       }))(obj)).Fields {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               //mt:len32
+                               Fields []NodeMetaField
+
+                               Inv Inv
+                       }))(obj)).Fields)[local243]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.NodeMetaField", err))
+               }
+       }
+       chk(((*(*(struct {
+               //mt:len32
+               Fields []NodeMetaField
+
+               Inv Inv
+       }))(obj)).Inv).Serialize(w))
+}
+
+func (obj *NodeMeta) deserialize(r io.Reader) {
+       var local244 uint32
+       {
+               p := &local244
+               *p = read32(r)
+       }
+       ((*(*(struct {
+               //mt:len32
+               Fields []NodeMetaField
+
+               Inv Inv
+       }))(obj)).Fields) = make([]NodeMetaField, local244)
+       for local245 := range (*(*(struct {
+               //mt:len32
+               Fields []NodeMetaField
+
+               Inv Inv
+       }))(obj)).Fields {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               //mt:len32
+                               Fields []NodeMetaField
+
+                               Inv Inv
+                       }))(obj)).Fields)[local245]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.NodeMetaField", err))
+               }
+       }
+       chk(((*(*(struct {
+               //mt:len32
+               Fields []NodeMetaField
+
+               Inv Inv
+       }))(obj)).Inv).Deserialize(r))
+}
+
+func (obj *MinimapMode) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Type  MinimapType
+                       Label string
+                       Size  uint16
+                       Texture
+                       Scale uint16
+               }))(obj)).Type).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.MinimapType", err))
+       }
+       if len(([]byte((*(*(struct {
+               Type  MinimapType
+               Label string
+               Size  uint16
+               Texture
+               Scale uint16
+       }))(obj)).Label))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Type  MinimapType
+                       Label string
+                       Size  uint16
+                       Texture
+                       Scale uint16
+               }))(obj)).Label))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Type  MinimapType
+                       Label string
+                       Size  uint16
+                       Texture
+                       Scale uint16
+               }))(obj)).Label))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       Type  MinimapType
+                       Label string
+                       Size  uint16
+                       Texture
+                       Scale uint16
+               }))(obj)).Size
+               write16(w, uint16(x))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Type  MinimapType
+                       Label string
+                       Size  uint16
+                       Texture
+                       Scale uint16
+               }))(obj)).Texture).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       {
+               x := (*(*(struct {
+                       Type  MinimapType
+                       Label string
+                       Size  uint16
+                       Texture
+                       Scale uint16
+               }))(obj)).Scale
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *MinimapMode) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Type  MinimapType
+                       Label string
+                       Size  uint16
+                       Texture
+                       Scale uint16
+               }))(obj)).Type).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.MinimapType", err))
+       }
+       var local246 []uint8
+       var local247 uint16
+       {
+               p := &local247
+               *p = read16(r)
+       }
+       (local246) = make([]uint8, local247)
+       {
+               _, err := io.ReadFull(r, (local246)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Type  MinimapType
+               Label string
+               Size  uint16
+               Texture
+               Scale uint16
+       }))(obj)).Label) = string(local246)
+       {
+               p := &(*(*(struct {
+                       Type  MinimapType
+                       Label string
+                       Size  uint16
+                       Texture
+                       Scale uint16
+               }))(obj)).Size
+               *p = read16(r)
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Type  MinimapType
+                       Label string
+                       Size  uint16
+                       Texture
+                       Scale uint16
+               }))(obj)).Texture).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Type  MinimapType
+                       Label string
+                       Size  uint16
+                       Texture
+                       Scale uint16
+               }))(obj)).Scale
+               *p = read16(r)
+       }
+}
+
+func (obj *NodeDef) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).Param0).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Content", err))
+       }
+       {
+               ow := w
+               w := new(bytes.Buffer)
+               {
+                       local248 := uint8(13)
+                       {
+                               x := local248
+                               write8(w, uint8(x))
+                       }
+               }
+               if len(([]byte((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).Name))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Name))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Name))[:])
+                       chk(err)
+               }
+               if len(((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).Groups)) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Groups)))
+                       write16(w, uint16(x))
+               }
+               for local249 := range (*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).Groups {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Param0 Content
+
+                                       Name   string
+                                       Groups []Group
+
+                                       P1Type   Param1Type
+                                       P2Type   Param2Type
+                                       DrawType DrawType
+
+                                       Mesh  string
+                                       Scale float32
+                                       //mt:const uint8(6)
+                                       Tiles        [6]TileDef
+                                       OverlayTiles [6]TileDef
+                                       //mt:const uint8(6)
+                                       SpecialTiles [6]TileDef
+
+                                       Color   color.NRGBA
+                                       Palette Texture
+
+                                       Waving       WaveType
+                                       ConnectSides uint8
+                                       ConnectTo    []Content
+                                       InsideTint   color.NRGBA
+                                       Level        uint8 // Must be < 128.
+
+                                       Translucent bool // Sunlight is scattered and becomes normal light.
+                                       Transparent bool // Sunlight isn't scattered.
+                                       LightSrc    uint8
+
+                                       GndContent   bool
+                                       Collides     bool
+                                       Pointable    bool
+                                       Diggable     bool
+                                       Climbable    bool
+                                       Replaceable  bool
+                                       OnRightClick bool
+
+                                       DmgPerSec int32
+
+                                       LiquidType   LiquidType
+                                       FlowingAlt   string
+                                       SrcAlt       string
+                                       Viscosity    uint8 // 0-7
+                                       LiqRenewable bool
+                                       FlowRange    uint8
+                                       DrownDmg     uint8
+                                       Floodable    bool
+
+                                       DrawBox, ColBox, SelBox NodeBox
+
+                                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                                       LegacyFaceDir bool
+                                       LegacyMounted bool
+
+                                       DigPredict string
+
+                                       MaxLvl uint8
+
+                                       AlphaUse
+                               }))(obj)).Groups)[local249]).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Group", err))
+                       }
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).P1Type).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Param1Type", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).P2Type).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Param2Type", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DrawType).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.DrawType", err))
+               }
+               if len(([]byte((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).Mesh))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Mesh))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Mesh))[:])
+                       chk(err)
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Scale
+                       write32(w, math.Float32bits(x))
+               }
+               {
+                       local250 := uint8(6)
+                       {
+                               x := local250
+                               write8(w, uint8(x))
+                       }
+               }
+               for local251 := range (*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).Tiles {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Param0 Content
+
+                                       Name   string
+                                       Groups []Group
+
+                                       P1Type   Param1Type
+                                       P2Type   Param2Type
+                                       DrawType DrawType
+
+                                       Mesh  string
+                                       Scale float32
+                                       //mt:const uint8(6)
+                                       Tiles        [6]TileDef
+                                       OverlayTiles [6]TileDef
+                                       //mt:const uint8(6)
+                                       SpecialTiles [6]TileDef
+
+                                       Color   color.NRGBA
+                                       Palette Texture
+
+                                       Waving       WaveType
+                                       ConnectSides uint8
+                                       ConnectTo    []Content
+                                       InsideTint   color.NRGBA
+                                       Level        uint8 // Must be < 128.
+
+                                       Translucent bool // Sunlight is scattered and becomes normal light.
+                                       Transparent bool // Sunlight isn't scattered.
+                                       LightSrc    uint8
+
+                                       GndContent   bool
+                                       Collides     bool
+                                       Pointable    bool
+                                       Diggable     bool
+                                       Climbable    bool
+                                       Replaceable  bool
+                                       OnRightClick bool
+
+                                       DmgPerSec int32
+
+                                       LiquidType   LiquidType
+                                       FlowingAlt   string
+                                       SrcAlt       string
+                                       Viscosity    uint8 // 0-7
+                                       LiqRenewable bool
+                                       FlowRange    uint8
+                                       DrownDmg     uint8
+                                       Floodable    bool
+
+                                       DrawBox, ColBox, SelBox NodeBox
+
+                                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                                       LegacyFaceDir bool
+                                       LegacyMounted bool
+
+                                       DigPredict string
+
+                                       MaxLvl uint8
+
+                                       AlphaUse
+                               }))(obj)).Tiles)[local251]).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileDef", err))
+                       }
+               }
+               for local252 := range (*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).OverlayTiles {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Param0 Content
+
+                                       Name   string
+                                       Groups []Group
+
+                                       P1Type   Param1Type
+                                       P2Type   Param2Type
+                                       DrawType DrawType
+
+                                       Mesh  string
+                                       Scale float32
+                                       //mt:const uint8(6)
+                                       Tiles        [6]TileDef
+                                       OverlayTiles [6]TileDef
+                                       //mt:const uint8(6)
+                                       SpecialTiles [6]TileDef
+
+                                       Color   color.NRGBA
+                                       Palette Texture
+
+                                       Waving       WaveType
+                                       ConnectSides uint8
+                                       ConnectTo    []Content
+                                       InsideTint   color.NRGBA
+                                       Level        uint8 // Must be < 128.
+
+                                       Translucent bool // Sunlight is scattered and becomes normal light.
+                                       Transparent bool // Sunlight isn't scattered.
+                                       LightSrc    uint8
+
+                                       GndContent   bool
+                                       Collides     bool
+                                       Pointable    bool
+                                       Diggable     bool
+                                       Climbable    bool
+                                       Replaceable  bool
+                                       OnRightClick bool
+
+                                       DmgPerSec int32
+
+                                       LiquidType   LiquidType
+                                       FlowingAlt   string
+                                       SrcAlt       string
+                                       Viscosity    uint8 // 0-7
+                                       LiqRenewable bool
+                                       FlowRange    uint8
+                                       DrownDmg     uint8
+                                       Floodable    bool
+
+                                       DrawBox, ColBox, SelBox NodeBox
+
+                                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                                       LegacyFaceDir bool
+                                       LegacyMounted bool
+
+                                       DigPredict string
+
+                                       MaxLvl uint8
+
+                                       AlphaUse
+                               }))(obj)).OverlayTiles)[local252]).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileDef", err))
+                       }
+               }
+               {
+                       local253 := uint8(6)
+                       {
+                               x := local253
+                               write8(w, uint8(x))
+                       }
+               }
+               for local254 := range (*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).SpecialTiles {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Param0 Content
+
+                                       Name   string
+                                       Groups []Group
+
+                                       P1Type   Param1Type
+                                       P2Type   Param2Type
+                                       DrawType DrawType
+
+                                       Mesh  string
+                                       Scale float32
+                                       //mt:const uint8(6)
+                                       Tiles        [6]TileDef
+                                       OverlayTiles [6]TileDef
+                                       //mt:const uint8(6)
+                                       SpecialTiles [6]TileDef
+
+                                       Color   color.NRGBA
+                                       Palette Texture
+
+                                       Waving       WaveType
+                                       ConnectSides uint8
+                                       ConnectTo    []Content
+                                       InsideTint   color.NRGBA
+                                       Level        uint8 // Must be < 128.
+
+                                       Translucent bool // Sunlight is scattered and becomes normal light.
+                                       Transparent bool // Sunlight isn't scattered.
+                                       LightSrc    uint8
+
+                                       GndContent   bool
+                                       Collides     bool
+                                       Pointable    bool
+                                       Diggable     bool
+                                       Climbable    bool
+                                       Replaceable  bool
+                                       OnRightClick bool
+
+                                       DmgPerSec int32
+
+                                       LiquidType   LiquidType
+                                       FlowingAlt   string
+                                       SrcAlt       string
+                                       Viscosity    uint8 // 0-7
+                                       LiqRenewable bool
+                                       FlowRange    uint8
+                                       DrownDmg     uint8
+                                       Floodable    bool
+
+                                       DrawBox, ColBox, SelBox NodeBox
+
+                                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                                       LegacyFaceDir bool
+                                       LegacyMounted bool
+
+                                       DigPredict string
+
+                                       MaxLvl uint8
+
+                                       AlphaUse
+                               }))(obj)).SpecialTiles)[local254]).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileDef", err))
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Color
+                       w.Write([]byte{x.A, x.R, x.G, x.B})
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Palette).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Waving).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.WaveType", err))
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).ConnectSides
+                       write8(w, uint8(x))
+               }
+               if len(((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).ConnectTo)) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).ConnectTo)))
+                       write16(w, uint16(x))
+               }
+               for local255 := range (*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).ConnectTo {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Param0 Content
+
+                                       Name   string
+                                       Groups []Group
+
+                                       P1Type   Param1Type
+                                       P2Type   Param2Type
+                                       DrawType DrawType
+
+                                       Mesh  string
+                                       Scale float32
+                                       //mt:const uint8(6)
+                                       Tiles        [6]TileDef
+                                       OverlayTiles [6]TileDef
+                                       //mt:const uint8(6)
+                                       SpecialTiles [6]TileDef
+
+                                       Color   color.NRGBA
+                                       Palette Texture
+
+                                       Waving       WaveType
+                                       ConnectSides uint8
+                                       ConnectTo    []Content
+                                       InsideTint   color.NRGBA
+                                       Level        uint8 // Must be < 128.
+
+                                       Translucent bool // Sunlight is scattered and becomes normal light.
+                                       Transparent bool // Sunlight isn't scattered.
+                                       LightSrc    uint8
+
+                                       GndContent   bool
+                                       Collides     bool
+                                       Pointable    bool
+                                       Diggable     bool
+                                       Climbable    bool
+                                       Replaceable  bool
+                                       OnRightClick bool
+
+                                       DmgPerSec int32
+
+                                       LiquidType   LiquidType
+                                       FlowingAlt   string
+                                       SrcAlt       string
+                                       Viscosity    uint8 // 0-7
+                                       LiqRenewable bool
+                                       FlowRange    uint8
+                                       DrownDmg     uint8
+                                       Floodable    bool
+
+                                       DrawBox, ColBox, SelBox NodeBox
+
+                                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                                       LegacyFaceDir bool
+                                       LegacyMounted bool
+
+                                       DigPredict string
+
+                                       MaxLvl uint8
+
+                                       AlphaUse
+                               }))(obj)).ConnectTo)[local255]).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Content", err))
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).InsideTint
+                       w.Write([]byte{x.A, x.R, x.G, x.B})
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Level
+                       write8(w, uint8(x))
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Translucent
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Transparent
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).LightSrc
+                       write8(w, uint8(x))
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).GndContent
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Collides
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Pointable
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Diggable
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Climbable
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Replaceable
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).OnRightClick
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DmgPerSec
+                       write32(w, uint32(x))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).LiquidType).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.LiquidType", err))
+               }
+               if len(([]byte((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).FlowingAlt))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).FlowingAlt))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).FlowingAlt))[:])
+                       chk(err)
+               }
+               if len(([]byte((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).SrcAlt))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).SrcAlt))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).SrcAlt))[:])
+                       chk(err)
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Viscosity
+                       write8(w, uint8(x))
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).LiqRenewable
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).FlowRange
+                       write8(w, uint8(x))
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DrownDmg
+                       write8(w, uint8(x))
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Floodable
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DrawBox).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.NodeBox", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).ColBox).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.NodeBox", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).SelBox).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.NodeBox", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).FootstepSnd).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundDef", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DiggingSnd).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundDef", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DugSnd).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundDef", err))
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).LegacyFaceDir
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).LegacyMounted
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               if len(([]byte((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).DigPredict))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DigPredict))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DigPredict))[:])
+                       chk(err)
+               }
+               {
+                       x := (*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).MaxLvl
+                       write8(w, uint8(x))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).AlphaUse).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AlphaUse", err))
+               }
+               {
+                       buf := w
+                       w := ow
+                       if len((buf.Bytes())) > math.MaxUint16 {
+                               chk(ErrTooLong)
+                       }
+                       {
+                               x := uint16(len((buf.Bytes())))
+                               write16(w, uint16(x))
+                       }
+                       {
+                               _, err := w.Write((buf.Bytes())[:])
+                               chk(err)
+                       }
+               }
+       }
+}
+
+func (obj *NodeDef) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).Param0).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Content", err))
+       }
+       {
+               var n uint16
+               {
+                       p := &n
+                       *p = read16(r)
+               }
+               r := &io.LimitedReader{r, int64(n)}
+               {
+                       var local256 uint8
+                       {
+                               p := &local256
+                               *p = read8(r)
+                       }
+                       if local256 != (13) {
+                               chk(fmt.Errorf("const %v: %v", 13, local256))
+                       }
+               }
+               var local257 []uint8
+               var local258 uint16
+               {
+                       p := &local258
+                       *p = read16(r)
+               }
+               (local257) = make([]uint8, local258)
+               {
+                       _, err := io.ReadFull(r, (local257)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).Name) = string(local257)
+               var local259 uint16
+               {
+                       p := &local259
+                       *p = read16(r)
+               }
+               ((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).Groups) = make([]Group, local259)
+               for local260 := range (*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).Groups {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Param0 Content
+
+                                       Name   string
+                                       Groups []Group
+
+                                       P1Type   Param1Type
+                                       P2Type   Param2Type
+                                       DrawType DrawType
+
+                                       Mesh  string
+                                       Scale float32
+                                       //mt:const uint8(6)
+                                       Tiles        [6]TileDef
+                                       OverlayTiles [6]TileDef
+                                       //mt:const uint8(6)
+                                       SpecialTiles [6]TileDef
+
+                                       Color   color.NRGBA
+                                       Palette Texture
+
+                                       Waving       WaveType
+                                       ConnectSides uint8
+                                       ConnectTo    []Content
+                                       InsideTint   color.NRGBA
+                                       Level        uint8 // Must be < 128.
+
+                                       Translucent bool // Sunlight is scattered and becomes normal light.
+                                       Transparent bool // Sunlight isn't scattered.
+                                       LightSrc    uint8
+
+                                       GndContent   bool
+                                       Collides     bool
+                                       Pointable    bool
+                                       Diggable     bool
+                                       Climbable    bool
+                                       Replaceable  bool
+                                       OnRightClick bool
+
+                                       DmgPerSec int32
+
+                                       LiquidType   LiquidType
+                                       FlowingAlt   string
+                                       SrcAlt       string
+                                       Viscosity    uint8 // 0-7
+                                       LiqRenewable bool
+                                       FlowRange    uint8
+                                       DrownDmg     uint8
+                                       Floodable    bool
+
+                                       DrawBox, ColBox, SelBox NodeBox
+
+                                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                                       LegacyFaceDir bool
+                                       LegacyMounted bool
+
+                                       DigPredict string
+
+                                       MaxLvl uint8
+
+                                       AlphaUse
+                               }))(obj)).Groups)[local260]).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Group", err))
+                       }
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).P1Type).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Param1Type", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).P2Type).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Param2Type", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DrawType).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.DrawType", err))
+               }
+               var local261 []uint8
+               var local262 uint16
+               {
+                       p := &local262
+                       *p = read16(r)
+               }
+               (local261) = make([]uint8, local262)
+               {
+                       _, err := io.ReadFull(r, (local261)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).Mesh) = string(local261)
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Scale
+                       *p = math.Float32frombits(read32(r))
+               }
+               {
+                       var local263 uint8
+                       {
+                               p := &local263
+                               *p = read8(r)
+                       }
+                       if local263 != (6) {
+                               chk(fmt.Errorf("const %v: %v", 6, local263))
+                       }
+               }
+               for local264 := range (*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).Tiles {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Param0 Content
+
+                                       Name   string
+                                       Groups []Group
+
+                                       P1Type   Param1Type
+                                       P2Type   Param2Type
+                                       DrawType DrawType
+
+                                       Mesh  string
+                                       Scale float32
+                                       //mt:const uint8(6)
+                                       Tiles        [6]TileDef
+                                       OverlayTiles [6]TileDef
+                                       //mt:const uint8(6)
+                                       SpecialTiles [6]TileDef
+
+                                       Color   color.NRGBA
+                                       Palette Texture
+
+                                       Waving       WaveType
+                                       ConnectSides uint8
+                                       ConnectTo    []Content
+                                       InsideTint   color.NRGBA
+                                       Level        uint8 // Must be < 128.
+
+                                       Translucent bool // Sunlight is scattered and becomes normal light.
+                                       Transparent bool // Sunlight isn't scattered.
+                                       LightSrc    uint8
+
+                                       GndContent   bool
+                                       Collides     bool
+                                       Pointable    bool
+                                       Diggable     bool
+                                       Climbable    bool
+                                       Replaceable  bool
+                                       OnRightClick bool
+
+                                       DmgPerSec int32
+
+                                       LiquidType   LiquidType
+                                       FlowingAlt   string
+                                       SrcAlt       string
+                                       Viscosity    uint8 // 0-7
+                                       LiqRenewable bool
+                                       FlowRange    uint8
+                                       DrownDmg     uint8
+                                       Floodable    bool
+
+                                       DrawBox, ColBox, SelBox NodeBox
+
+                                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                                       LegacyFaceDir bool
+                                       LegacyMounted bool
+
+                                       DigPredict string
+
+                                       MaxLvl uint8
+
+                                       AlphaUse
+                               }))(obj)).Tiles)[local264]).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileDef", err))
+                       }
+               }
+               for local265 := range (*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).OverlayTiles {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Param0 Content
+
+                                       Name   string
+                                       Groups []Group
+
+                                       P1Type   Param1Type
+                                       P2Type   Param2Type
+                                       DrawType DrawType
+
+                                       Mesh  string
+                                       Scale float32
+                                       //mt:const uint8(6)
+                                       Tiles        [6]TileDef
+                                       OverlayTiles [6]TileDef
+                                       //mt:const uint8(6)
+                                       SpecialTiles [6]TileDef
+
+                                       Color   color.NRGBA
+                                       Palette Texture
+
+                                       Waving       WaveType
+                                       ConnectSides uint8
+                                       ConnectTo    []Content
+                                       InsideTint   color.NRGBA
+                                       Level        uint8 // Must be < 128.
+
+                                       Translucent bool // Sunlight is scattered and becomes normal light.
+                                       Transparent bool // Sunlight isn't scattered.
+                                       LightSrc    uint8
+
+                                       GndContent   bool
+                                       Collides     bool
+                                       Pointable    bool
+                                       Diggable     bool
+                                       Climbable    bool
+                                       Replaceable  bool
+                                       OnRightClick bool
+
+                                       DmgPerSec int32
+
+                                       LiquidType   LiquidType
+                                       FlowingAlt   string
+                                       SrcAlt       string
+                                       Viscosity    uint8 // 0-7
+                                       LiqRenewable bool
+                                       FlowRange    uint8
+                                       DrownDmg     uint8
+                                       Floodable    bool
+
+                                       DrawBox, ColBox, SelBox NodeBox
+
+                                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                                       LegacyFaceDir bool
+                                       LegacyMounted bool
+
+                                       DigPredict string
+
+                                       MaxLvl uint8
+
+                                       AlphaUse
+                               }))(obj)).OverlayTiles)[local265]).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileDef", err))
+                       }
+               }
+               {
+                       var local266 uint8
+                       {
+                               p := &local266
+                               *p = read8(r)
+                       }
+                       if local266 != (6) {
+                               chk(fmt.Errorf("const %v: %v", 6, local266))
+                       }
+               }
+               for local267 := range (*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).SpecialTiles {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Param0 Content
+
+                                       Name   string
+                                       Groups []Group
+
+                                       P1Type   Param1Type
+                                       P2Type   Param2Type
+                                       DrawType DrawType
+
+                                       Mesh  string
+                                       Scale float32
+                                       //mt:const uint8(6)
+                                       Tiles        [6]TileDef
+                                       OverlayTiles [6]TileDef
+                                       //mt:const uint8(6)
+                                       SpecialTiles [6]TileDef
+
+                                       Color   color.NRGBA
+                                       Palette Texture
+
+                                       Waving       WaveType
+                                       ConnectSides uint8
+                                       ConnectTo    []Content
+                                       InsideTint   color.NRGBA
+                                       Level        uint8 // Must be < 128.
+
+                                       Translucent bool // Sunlight is scattered and becomes normal light.
+                                       Transparent bool // Sunlight isn't scattered.
+                                       LightSrc    uint8
+
+                                       GndContent   bool
+                                       Collides     bool
+                                       Pointable    bool
+                                       Diggable     bool
+                                       Climbable    bool
+                                       Replaceable  bool
+                                       OnRightClick bool
+
+                                       DmgPerSec int32
+
+                                       LiquidType   LiquidType
+                                       FlowingAlt   string
+                                       SrcAlt       string
+                                       Viscosity    uint8 // 0-7
+                                       LiqRenewable bool
+                                       FlowRange    uint8
+                                       DrownDmg     uint8
+                                       Floodable    bool
+
+                                       DrawBox, ColBox, SelBox NodeBox
+
+                                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                                       LegacyFaceDir bool
+                                       LegacyMounted bool
+
+                                       DigPredict string
+
+                                       MaxLvl uint8
+
+                                       AlphaUse
+                               }))(obj)).SpecialTiles)[local267]).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileDef", err))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Color
+                       *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Palette).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Waving).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.WaveType", err))
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).ConnectSides
+                       *p = read8(r)
+               }
+               var local268 uint16
+               {
+                       p := &local268
+                       *p = read16(r)
+               }
+               ((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).ConnectTo) = make([]Content, local268)
+               for local269 := range (*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).ConnectTo {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Param0 Content
+
+                                       Name   string
+                                       Groups []Group
+
+                                       P1Type   Param1Type
+                                       P2Type   Param2Type
+                                       DrawType DrawType
+
+                                       Mesh  string
+                                       Scale float32
+                                       //mt:const uint8(6)
+                                       Tiles        [6]TileDef
+                                       OverlayTiles [6]TileDef
+                                       //mt:const uint8(6)
+                                       SpecialTiles [6]TileDef
+
+                                       Color   color.NRGBA
+                                       Palette Texture
+
+                                       Waving       WaveType
+                                       ConnectSides uint8
+                                       ConnectTo    []Content
+                                       InsideTint   color.NRGBA
+                                       Level        uint8 // Must be < 128.
+
+                                       Translucent bool // Sunlight is scattered and becomes normal light.
+                                       Transparent bool // Sunlight isn't scattered.
+                                       LightSrc    uint8
+
+                                       GndContent   bool
+                                       Collides     bool
+                                       Pointable    bool
+                                       Diggable     bool
+                                       Climbable    bool
+                                       Replaceable  bool
+                                       OnRightClick bool
+
+                                       DmgPerSec int32
+
+                                       LiquidType   LiquidType
+                                       FlowingAlt   string
+                                       SrcAlt       string
+                                       Viscosity    uint8 // 0-7
+                                       LiqRenewable bool
+                                       FlowRange    uint8
+                                       DrownDmg     uint8
+                                       Floodable    bool
+
+                                       DrawBox, ColBox, SelBox NodeBox
+
+                                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                                       LegacyFaceDir bool
+                                       LegacyMounted bool
+
+                                       DigPredict string
+
+                                       MaxLvl uint8
+
+                                       AlphaUse
+                               }))(obj)).ConnectTo)[local269]).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Content", err))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).InsideTint
+                       *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Level
+                       *p = read8(r)
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Translucent
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Transparent
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).LightSrc
+                       *p = read8(r)
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).GndContent
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Collides
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Pointable
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Diggable
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Climbable
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Replaceable
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).OnRightClick
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DmgPerSec
+                       *p = int32(read32(r))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).LiquidType).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.LiquidType", err))
+               }
+               var local270 []uint8
+               var local271 uint16
+               {
+                       p := &local271
+                       *p = read16(r)
+               }
+               (local270) = make([]uint8, local271)
+               {
+                       _, err := io.ReadFull(r, (local270)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).FlowingAlt) = string(local270)
+               var local272 []uint8
+               var local273 uint16
+               {
+                       p := &local273
+                       *p = read16(r)
+               }
+               (local272) = make([]uint8, local273)
+               {
+                       _, err := io.ReadFull(r, (local272)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).SrcAlt) = string(local272)
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Viscosity
+                       *p = read8(r)
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).LiqRenewable
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).FlowRange
+                       *p = read8(r)
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DrownDmg
+                       *p = read8(r)
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).Floodable
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DrawBox).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.NodeBox", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).ColBox).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.NodeBox", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).SelBox).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.NodeBox", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).FootstepSnd).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundDef", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DiggingSnd).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundDef", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).DugSnd).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundDef", err))
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).LegacyFaceDir
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).LegacyMounted
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               var local274 []uint8
+               var local275 uint16
+               {
+                       p := &local275
+                       *p = read16(r)
+               }
+               (local274) = make([]uint8, local275)
+               {
+                       _, err := io.ReadFull(r, (local274)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       Param0 Content
+
+                       Name   string
+                       Groups []Group
+
+                       P1Type   Param1Type
+                       P2Type   Param2Type
+                       DrawType DrawType
+
+                       Mesh  string
+                       Scale float32
+                       //mt:const uint8(6)
+                       Tiles        [6]TileDef
+                       OverlayTiles [6]TileDef
+                       //mt:const uint8(6)
+                       SpecialTiles [6]TileDef
+
+                       Color   color.NRGBA
+                       Palette Texture
+
+                       Waving       WaveType
+                       ConnectSides uint8
+                       ConnectTo    []Content
+                       InsideTint   color.NRGBA
+                       Level        uint8 // Must be < 128.
+
+                       Translucent bool // Sunlight is scattered and becomes normal light.
+                       Transparent bool // Sunlight isn't scattered.
+                       LightSrc    uint8
+
+                       GndContent   bool
+                       Collides     bool
+                       Pointable    bool
+                       Diggable     bool
+                       Climbable    bool
+                       Replaceable  bool
+                       OnRightClick bool
+
+                       DmgPerSec int32
+
+                       LiquidType   LiquidType
+                       FlowingAlt   string
+                       SrcAlt       string
+                       Viscosity    uint8 // 0-7
+                       LiqRenewable bool
+                       FlowRange    uint8
+                       DrownDmg     uint8
+                       Floodable    bool
+
+                       DrawBox, ColBox, SelBox NodeBox
+
+                       FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                       LegacyFaceDir bool
+                       LegacyMounted bool
+
+                       DigPredict string
+
+                       MaxLvl uint8
+
+                       AlphaUse
+               }))(obj)).DigPredict) = string(local274)
+               {
+                       p := &(*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).MaxLvl
+                       *p = read8(r)
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Param0 Content
+
+                               Name   string
+                               Groups []Group
+
+                               P1Type   Param1Type
+                               P2Type   Param2Type
+                               DrawType DrawType
+
+                               Mesh  string
+                               Scale float32
+                               //mt:const uint8(6)
+                               Tiles        [6]TileDef
+                               OverlayTiles [6]TileDef
+                               //mt:const uint8(6)
+                               SpecialTiles [6]TileDef
+
+                               Color   color.NRGBA
+                               Palette Texture
+
+                               Waving       WaveType
+                               ConnectSides uint8
+                               ConnectTo    []Content
+                               InsideTint   color.NRGBA
+                               Level        uint8 // Must be < 128.
+
+                               Translucent bool // Sunlight is scattered and becomes normal light.
+                               Transparent bool // Sunlight isn't scattered.
+                               LightSrc    uint8
+
+                               GndContent   bool
+                               Collides     bool
+                               Pointable    bool
+                               Diggable     bool
+                               Climbable    bool
+                               Replaceable  bool
+                               OnRightClick bool
+
+                               DmgPerSec int32
+
+                               LiquidType   LiquidType
+                               FlowingAlt   string
+                               SrcAlt       string
+                               Viscosity    uint8 // 0-7
+                               LiqRenewable bool
+                               FlowRange    uint8
+                               DrownDmg     uint8
+                               Floodable    bool
+
+                               DrawBox, ColBox, SelBox NodeBox
+
+                               FootstepSnd, DiggingSnd, DugSnd SoundDef
+
+                               LegacyFaceDir bool
+                               LegacyMounted bool
+
+                               DigPredict string
+
+                               MaxLvl uint8
+
+                               AlphaUse
+                       }))(obj)).AlphaUse).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AlphaUse", err))
+               }
+               if r.N > 0 {
+                       chk(fmt.Errorf("%d bytes of trailing data", r.N))
+               }
+       }
+}
+
+func (obj *PointedNode) serialize(w io.Writer) {
+       for local276 := range (*(*(struct {
+               Under, Above [3]int16
+       }))(obj)).Under {
+               {
+                       x := ((*(*(struct {
+                               Under, Above [3]int16
+                       }))(obj)).Under)[local276]
+                       write16(w, uint16(x))
+               }
+       }
+       for local277 := range (*(*(struct {
+               Under, Above [3]int16
+       }))(obj)).Above {
+               {
+                       x := ((*(*(struct {
+                               Under, Above [3]int16
+                       }))(obj)).Above)[local277]
+                       write16(w, uint16(x))
+               }
+       }
+}
+
+func (obj *PointedNode) deserialize(r io.Reader) {
+       for local278 := range (*(*(struct {
+               Under, Above [3]int16
+       }))(obj)).Under {
+               {
+                       p := &((*(*(struct {
+                               Under, Above [3]int16
+                       }))(obj)).Under)[local278]
+                       *p = int16(read16(r))
+               }
+       }
+       for local279 := range (*(*(struct {
+               Under, Above [3]int16
+       }))(obj)).Above {
+               {
+                       p := &((*(*(struct {
+                               Under, Above [3]int16
+                       }))(obj)).Above)[local279]
+                       *p = int16(read16(r))
+               }
+       }
+}
+
+func (obj *PointedAO) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID AOID
+               }))(obj)).ID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+}
+
+func (obj *PointedAO) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID AOID
+               }))(obj)).ID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+}
+
+func (obj *CompressionModes) serialize(w io.Writer) {
+       {
+               x := *(*(uint16))(obj)
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *CompressionModes) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint16))(obj)
+               *p = read16(r)
+       }
+}
+
+func (obj *PlayerPos) serialize(w io.Writer) {
+       for local280 := range (*(*(struct {
+               Pos100, Vel100   [3]int32
+               Pitch100, Yaw100 int32
+               Keys             Keys
+               FOV80            uint8
+               WantedRange      uint8 // in MapBlks.
+       }))(obj)).Pos100 {
+               {
+                       x := ((*(*(struct {
+                               Pos100, Vel100   [3]int32
+                               Pitch100, Yaw100 int32
+                               Keys             Keys
+                               FOV80            uint8
+                               WantedRange      uint8 // in MapBlks.
+                       }))(obj)).Pos100)[local280]
+                       write32(w, uint32(x))
+               }
+       }
+       for local281 := range (*(*(struct {
+               Pos100, Vel100   [3]int32
+               Pitch100, Yaw100 int32
+               Keys             Keys
+               FOV80            uint8
+               WantedRange      uint8 // in MapBlks.
+       }))(obj)).Vel100 {
+               {
+                       x := ((*(*(struct {
+                               Pos100, Vel100   [3]int32
+                               Pitch100, Yaw100 int32
+                               Keys             Keys
+                               FOV80            uint8
+                               WantedRange      uint8 // in MapBlks.
+                       }))(obj)).Vel100)[local281]
+                       write32(w, uint32(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Pos100, Vel100   [3]int32
+                       Pitch100, Yaw100 int32
+                       Keys             Keys
+                       FOV80            uint8
+                       WantedRange      uint8 // in MapBlks.
+               }))(obj)).Pitch100
+               write32(w, uint32(x))
+       }
+       {
+               x := (*(*(struct {
+                       Pos100, Vel100   [3]int32
+                       Pitch100, Yaw100 int32
+                       Keys             Keys
+                       FOV80            uint8
+                       WantedRange      uint8 // in MapBlks.
+               }))(obj)).Yaw100
+               write32(w, uint32(x))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos100, Vel100   [3]int32
+                       Pitch100, Yaw100 int32
+                       Keys             Keys
+                       FOV80            uint8
+                       WantedRange      uint8 // in MapBlks.
+               }))(obj)).Keys).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Keys", err))
+       }
+       {
+               x := (*(*(struct {
+                       Pos100, Vel100   [3]int32
+                       Pitch100, Yaw100 int32
+                       Keys             Keys
+                       FOV80            uint8
+                       WantedRange      uint8 // in MapBlks.
+               }))(obj)).FOV80
+               write8(w, uint8(x))
+       }
+       {
+               x := (*(*(struct {
+                       Pos100, Vel100   [3]int32
+                       Pitch100, Yaw100 int32
+                       Keys             Keys
+                       FOV80            uint8
+                       WantedRange      uint8 // in MapBlks.
+               }))(obj)).WantedRange
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *PlayerPos) deserialize(r io.Reader) {
+       for local282 := range (*(*(struct {
+               Pos100, Vel100   [3]int32
+               Pitch100, Yaw100 int32
+               Keys             Keys
+               FOV80            uint8
+               WantedRange      uint8 // in MapBlks.
+       }))(obj)).Pos100 {
+               {
+                       p := &((*(*(struct {
+                               Pos100, Vel100   [3]int32
+                               Pitch100, Yaw100 int32
+                               Keys             Keys
+                               FOV80            uint8
+                               WantedRange      uint8 // in MapBlks.
+                       }))(obj)).Pos100)[local282]
+                       *p = int32(read32(r))
+               }
+       }
+       for local283 := range (*(*(struct {
+               Pos100, Vel100   [3]int32
+               Pitch100, Yaw100 int32
+               Keys             Keys
+               FOV80            uint8
+               WantedRange      uint8 // in MapBlks.
+       }))(obj)).Vel100 {
+               {
+                       p := &((*(*(struct {
+                               Pos100, Vel100   [3]int32
+                               Pitch100, Yaw100 int32
+                               Keys             Keys
+                               FOV80            uint8
+                               WantedRange      uint8 // in MapBlks.
+                       }))(obj)).Vel100)[local283]
+                       *p = int32(read32(r))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Pos100, Vel100   [3]int32
+                       Pitch100, Yaw100 int32
+                       Keys             Keys
+                       FOV80            uint8
+                       WantedRange      uint8 // in MapBlks.
+               }))(obj)).Pitch100
+               *p = int32(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Pos100, Vel100   [3]int32
+                       Pitch100, Yaw100 int32
+                       Keys             Keys
+                       FOV80            uint8
+                       WantedRange      uint8 // in MapBlks.
+               }))(obj)).Yaw100
+               *p = int32(read32(r))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos100, Vel100   [3]int32
+                       Pitch100, Yaw100 int32
+                       Keys             Keys
+                       FOV80            uint8
+                       WantedRange      uint8 // in MapBlks.
+               }))(obj)).Keys).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Keys", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Pos100, Vel100   [3]int32
+                       Pitch100, Yaw100 int32
+                       Keys             Keys
+                       FOV80            uint8
+                       WantedRange      uint8 // in MapBlks.
+               }))(obj)).FOV80
+               *p = read8(r)
+       }
+       {
+               p := &(*(*(struct {
+                       Pos100, Vel100   [3]int32
+                       Pitch100, Yaw100 int32
+                       Keys             Keys
+                       FOV80            uint8
+                       WantedRange      uint8 // in MapBlks.
+               }))(obj)).WantedRange
+               *p = read8(r)
+       }
+}
+
+func (obj *Interaction) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *Interaction) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *SoundID) serialize(w io.Writer) {
+       {
+               x := *(*(int32))(obj)
+               write32(w, uint32(x))
+       }
+}
+
+func (obj *SoundID) deserialize(r io.Reader) {
+       {
+               p := &*(*(int32))(obj)
+               *p = int32(read32(r))
+       }
+}
+
+func (obj *Field) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Name string
+
+               //mt:len32
+               Value string
+       }))(obj)).Name))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Name string
+
+                       //mt:len32
+                       Value string
+               }))(obj)).Name))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Name string
+
+                       //mt:len32
+                       Value string
+               }))(obj)).Name))[:])
+               chk(err)
+       }
+       if len(([]byte((*(*(struct {
+               Name string
+
+               //mt:len32
+               Value string
+       }))(obj)).Value))) > math.MaxUint32 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint32(len(([]byte((*(*(struct {
+                       Name string
+
+                       //mt:len32
+                       Value string
+               }))(obj)).Value))))
+               write32(w, uint32(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Name string
+
+                       //mt:len32
+                       Value string
+               }))(obj)).Value))[:])
+               chk(err)
+       }
+}
+
+func (obj *Field) deserialize(r io.Reader) {
+       var local284 []uint8
+       var local285 uint16
+       {
+               p := &local285
+               *p = read16(r)
+       }
+       (local284) = make([]uint8, local285)
+       {
+               _, err := io.ReadFull(r, (local284)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Name string
+
+               //mt:len32
+               Value string
+       }))(obj)).Name) = string(local284)
+       var local286 []uint8
+       var local287 uint32
+       {
+               p := &local287
+               *p = read32(r)
+       }
+       (local286) = make([]uint8, local287)
+       {
+               _, err := io.ReadFull(r, (local286)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Name string
+
+               //mt:len32
+               Value string
+       }))(obj)).Value) = string(local286)
+}
+
+func (obj *AuthMethods) serialize(w io.Writer) {
+       {
+               x := *(*(uint32))(obj)
+               write32(w, uint32(x))
+       }
+}
+
+func (obj *AuthMethods) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint32))(obj)
+               *p = read32(r)
+       }
+}
+
+func (obj *Pos) serialize(w io.Writer) {
+       if err := pcall(func() {
+               (*(*(Vec))(obj)).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+}
+
+func (obj *Pos) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               (*(*(Vec))(obj)).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+}
+
+func (obj *DiscoReason) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *DiscoReason) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *MapBlk) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Flags   MapBlkFlags
+                       LitFrom LitFromBlks
+
+                       //mt:zlib
+                       Param0 [4096]Content
+                       Param1 [4096]uint8
+                       Param2 [4096]uint8
+
+                       NodeMetas map[uint16]*NodeMeta
+               }))(obj)).Flags).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.MapBlkFlags", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Flags   MapBlkFlags
+                       LitFrom LitFromBlks
+
+                       //mt:zlib
+                       Param0 [4096]Content
+                       Param1 [4096]uint8
+                       Param2 [4096]uint8
+
+                       NodeMetas map[uint16]*NodeMeta
+               }))(obj)).LitFrom).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.LitFromBlks", err))
+       }
+       {
+               local288 := uint8(2) // Size of param0 in bytes.
+               {
+                       x := local288
+                       write8(w, uint8(x))
+               }
+       }
+       {
+               local289 := uint8(1 + 1) // Size of param1 and param2 combined, in bytes.
+               {
+                       x := local289
+                       write8(w, uint8(x))
+               }
+       }
+       {
+               w := zlib.NewWriter(w)
+               for local290 := range (*(*(struct {
+                       Flags   MapBlkFlags
+                       LitFrom LitFromBlks
+
+                       //mt:zlib
+                       Param0 [4096]Content
+                       Param1 [4096]uint8
+                       Param2 [4096]uint8
+
+                       NodeMetas map[uint16]*NodeMeta
+               }))(obj)).Param0 {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Flags   MapBlkFlags
+                                       LitFrom LitFromBlks
+
+                                       //mt:zlib
+                                       Param0 [4096]Content
+                                       Param1 [4096]uint8
+                                       Param2 [4096]uint8
+
+                                       NodeMetas map[uint16]*NodeMeta
+                               }))(obj)).Param0)[local290]).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Content", err))
+                       }
+               }
+               {
+                       _, err := w.Write(((*(*(struct {
+                               Flags   MapBlkFlags
+                               LitFrom LitFromBlks
+
+                               //mt:zlib
+                               Param0 [4096]Content
+                               Param1 [4096]uint8
+                               Param2 [4096]uint8
+
+                               NodeMetas map[uint16]*NodeMeta
+                       }))(obj)).Param1)[:])
+                       chk(err)
+               }
+               {
+                       _, err := w.Write(((*(*(struct {
+                               Flags   MapBlkFlags
+                               LitFrom LitFromBlks
+
+                               //mt:zlib
+                               Param0 [4096]Content
+                               Param1 [4096]uint8
+                               Param2 [4096]uint8
+
+                               NodeMetas map[uint16]*NodeMeta
+                       }))(obj)).Param2)[:])
+                       chk(err)
+               }
+               chk(w.Close())
+       }
+       {
+               x := (*(*(struct {
+                       Flags   MapBlkFlags
+                       LitFrom LitFromBlks
+
+                       //mt:zlib
+                       Param0 [4096]Content
+                       Param1 [4096]uint8
+                       Param2 [4096]uint8
+
+                       NodeMetas map[uint16]*NodeMeta
+               }))(obj)).NodeMetas
+               {
+                       w := zlib.NewWriter(w)
+                       if x == nil {
+                               write8(w, 0)
+                       } else {
+                               write8(w, 2)
+                               if len(x) > math.MaxUint16 {
+                                       chk(ErrTooLong)
+                               }
+                               write16(w, uint16(len(x)))
+                               keys := make([]uint16, 0, len(x))
+                               for key := range x {
+                                       keys = append(keys, key)
+                               }
+                               sort.Slice(keys, func(i, j int) bool {
+                                       i2pos := func(i int) [3]int16 {
+                                               return Blkpos2Pos([3]int16{}, keys[i])
+                                       }
+                                       p, q := i2pos(i), i2pos(j)
+                                       for i := range p {
+                                               switch {
+                                               case p[i] < q[i]:
+                                                       return true
+                                               case p[i] > q[i]:
+                                                       return false
+                                               }
+                                       }
+                                       return false
+                               })
+                               for _, key := range keys {
+                                       write16(w, key)
+                                       chk(serialize(w, x[key]))
+                               }
+                       }
+                       chk(w.Close())
+               }
+       }
+       {
+               local291 := uint8(2) // version
+               {
+                       x := local291
+                       write8(w, uint8(x))
+               }
+       }
+}
+
+func (obj *MapBlk) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Flags   MapBlkFlags
+                       LitFrom LitFromBlks
+
+                       //mt:zlib
+                       Param0 [4096]Content
+                       Param1 [4096]uint8
+                       Param2 [4096]uint8
+
+                       NodeMetas map[uint16]*NodeMeta
+               }))(obj)).Flags).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.MapBlkFlags", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Flags   MapBlkFlags
+                       LitFrom LitFromBlks
+
+                       //mt:zlib
+                       Param0 [4096]Content
+                       Param1 [4096]uint8
+                       Param2 [4096]uint8
+
+                       NodeMetas map[uint16]*NodeMeta
+               }))(obj)).LitFrom).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.LitFromBlks", err))
+       }
+       {
+               var local292 uint8
+               {
+                       p := &local292
+                       *p = read8(r)
+               }
+               if local292 != (2) {
+                       chk(fmt.Errorf("const %v: %v", 2, local292))
+               }
+       }
+       {
+               var local293 uint8
+               {
+                       p := &local293
+                       *p = read8(r)
+               }
+               if local293 != (2) {
+                       chk(fmt.Errorf("const %v: %v", 2, local293))
+               }
+       }
+       {
+               r, err := zlib.NewReader(byteReader{r})
+               chk(err)
+               for local294 := range (*(*(struct {
+                       Flags   MapBlkFlags
+                       LitFrom LitFromBlks
+
+                       //mt:zlib
+                       Param0 [4096]Content
+                       Param1 [4096]uint8
+                       Param2 [4096]uint8
+
+                       NodeMetas map[uint16]*NodeMeta
+               }))(obj)).Param0 {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Flags   MapBlkFlags
+                                       LitFrom LitFromBlks
+
+                                       //mt:zlib
+                                       Param0 [4096]Content
+                                       Param1 [4096]uint8
+                                       Param2 [4096]uint8
+
+                                       NodeMetas map[uint16]*NodeMeta
+                               }))(obj)).Param0)[local294]).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Content", err))
+                       }
+               }
+               {
+                       _, err := io.ReadFull(r, ((*(*(struct {
+                               Flags   MapBlkFlags
+                               LitFrom LitFromBlks
+
+                               //mt:zlib
+                               Param0 [4096]Content
+                               Param1 [4096]uint8
+                               Param2 [4096]uint8
+
+                               NodeMetas map[uint16]*NodeMeta
+                       }))(obj)).Param1)[:])
+                       chk(err)
+               }
+               {
+                       _, err := io.ReadFull(r, ((*(*(struct {
+                               Flags   MapBlkFlags
+                               LitFrom LitFromBlks
+
+                               //mt:zlib
+                               Param0 [4096]Content
+                               Param1 [4096]uint8
+                               Param2 [4096]uint8
+
+                               NodeMetas map[uint16]*NodeMeta
+                       }))(obj)).Param2)[:])
+                       chk(err)
+               }
+               chk(r.Close())
+       }
+       {
+               p := &(*(*(struct {
+                       Flags   MapBlkFlags
+                       LitFrom LitFromBlks
+
+                       //mt:zlib
+                       Param0 [4096]Content
+                       Param1 [4096]uint8
+                       Param2 [4096]uint8
+
+                       NodeMetas map[uint16]*NodeMeta
+               }))(obj)).NodeMetas
+               {
+                       r, err := zlib.NewReader(byteReader{r})
+                       chk(err)
+                       switch ver := read8(r); ver {
+                       case 0:
+                               *p = nil
+                       case 2:
+                               n := read16(r)
+                               *p = make(map[uint16]*NodeMeta, n)
+                               for ; n > 0; n-- {
+                                       pos := read16(r)
+                                       nm := new(NodeMeta)
+                                       chk(deserialize(r, nm))
+                                       (*p)[pos] = nm
+                               }
+                       default:
+                               chk(fmt.Errorf("unsupported nodemetas version: %d", ver))
+                       }
+                       chk(r.Close())
+               }
+       }
+       {
+               var local295 uint8
+               {
+                       p := &local295
+                       *p = read8(r)
+               }
+               if local295 != (2) {
+                       chk(fmt.Errorf("const %v: %v", 2, local295))
+               }
+       }
+}
+
+func (obj *Node) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Param0         Content
+                       Param1, Param2 uint8
+               }))(obj)).Param0).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Content", err))
+       }
+       {
+               x := (*(*(struct {
+                       Param0         Content
+                       Param1, Param2 uint8
+               }))(obj)).Param1
+               write8(w, uint8(x))
+       }
+       {
+               x := (*(*(struct {
+                       Param0         Content
+                       Param1, Param2 uint8
+               }))(obj)).Param2
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *Node) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Param0         Content
+                       Param1, Param2 uint8
+               }))(obj)).Param0).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Content", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Param0         Content
+                       Param1, Param2 uint8
+               }))(obj)).Param1
+               *p = read8(r)
+       }
+       {
+               p := &(*(*(struct {
+                       Param0         Content
+                       Param1, Param2 uint8
+               }))(obj)).Param2
+               *p = read8(r)
+       }
+}
+
+func (obj *CSMRestrictionFlags) serialize(w io.Writer) {
+       {
+               x := *(*(uint64))(obj)
+               write64(w, uint64(x))
+       }
+}
+
+func (obj *CSMRestrictionFlags) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint64))(obj)
+               *p = read64(r)
+       }
+}
+
+func (obj *Vec) serialize(w io.Writer) {
+       for local296 := range *(*([3]float32))(obj) {
+               {
+                       x := (*(*([3]float32))(obj))[local296]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+}
+
+func (obj *Vec) deserialize(r io.Reader) {
+       for local297 := range *(*([3]float32))(obj) {
+               {
+                       p := &(*(*([3]float32))(obj))[local297]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+}
+
+func (obj *ChatMsgType) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *ChatMsgType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *AOID) serialize(w io.Writer) {
+       {
+               x := *(*(uint16))(obj)
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *AOID) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint16))(obj)
+               *p = read16(r)
+       }
+}
+
+func (obj *aoType) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *aoType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *AOInitData) serialize(w io.Writer) {
+       {
+               local298 := uint8(1)
+               {
+                       x := local298
+                       write8(w, uint8(x))
+               }
+       }
+       if len(([]byte((*(*(struct {
+
+               // For players.
+               Name     string
+               IsPlayer bool
+
+               ID AOID
+
+               Pos
+               Rot [3]float32
+
+               HP uint16
+
+               // See (de)serialize.fmt.
+               Msgs []AOMsg
+       }))(obj)).Name))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+
+                       // For players.
+                       Name     string
+                       IsPlayer bool
+
+                       ID AOID
+
+                       Pos
+                       Rot [3]float32
+
+                       HP uint16
+
+                       // See (de)serialize.fmt.
+                       Msgs []AOMsg
+               }))(obj)).Name))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+
+                       // For players.
+                       Name     string
+                       IsPlayer bool
+
+                       ID AOID
+
+                       Pos
+                       Rot [3]float32
+
+                       HP uint16
+
+                       // See (de)serialize.fmt.
+                       Msgs []AOMsg
+               }))(obj)).Name))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+
+                       // For players.
+                       Name     string
+                       IsPlayer bool
+
+                       ID AOID
+
+                       Pos
+                       Rot [3]float32
+
+                       HP uint16
+
+                       // See (de)serialize.fmt.
+                       Msgs []AOMsg
+               }))(obj)).IsPlayer
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+
+                       // For players.
+                       Name     string
+                       IsPlayer bool
+
+                       ID AOID
+
+                       Pos
+                       Rot [3]float32
+
+                       HP uint16
+
+                       // See (de)serialize.fmt.
+                       Msgs []AOMsg
+               }))(obj)).ID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+
+                       // For players.
+                       Name     string
+                       IsPlayer bool
+
+                       ID AOID
+
+                       Pos
+                       Rot [3]float32
+
+                       HP uint16
+
+                       // See (de)serialize.fmt.
+                       Msgs []AOMsg
+               }))(obj)).Pos).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+       for local299 := range (*(*(struct {
+
+               // For players.
+               Name     string
+               IsPlayer bool
+
+               ID AOID
+
+               Pos
+               Rot [3]float32
+
+               HP uint16
+
+               // See (de)serialize.fmt.
+               Msgs []AOMsg
+       }))(obj)).Rot {
+               {
+                       x := ((*(*(struct {
+
+                               // For players.
+                               Name     string
+                               IsPlayer bool
+
+                               ID AOID
+
+                               Pos
+                               Rot [3]float32
+
+                               HP uint16
+
+                               // See (de)serialize.fmt.
+                               Msgs []AOMsg
+                       }))(obj)).Rot)[local299]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+
+                       // For players.
+                       Name     string
+                       IsPlayer bool
+
+                       ID AOID
+
+                       Pos
+                       Rot [3]float32
+
+                       HP uint16
+
+                       // See (de)serialize.fmt.
+                       Msgs []AOMsg
+               }))(obj)).HP
+               write16(w, uint16(x))
+       }
+       {
+               x := (*(*(struct {
+
+                       // For players.
+                       Name     string
+                       IsPlayer bool
+
+                       ID AOID
+
+                       Pos
+                       Rot [3]float32
+
+                       HP uint16
+
+                       // See (de)serialize.fmt.
+                       Msgs []AOMsg
+               }))(obj)).Msgs
+               { // For AOInitData.Msgs
+                       if len(x) > math.MaxUint8 {
+                               chk(ErrTooLong)
+                       }
+                       write8(w, uint8(len(x)))
+                       for _, msg := range x {
+                               var b bytes.Buffer
+                               chk(writeAOMsg(&b, msg))
+                               if b.Len() > math.MaxUint32 {
+                                       chk(ErrTooLong)
+                               }
+                               write32(w, uint32(b.Len()))
+                               _, err := b.WriteTo(w)
+                               chk(err)
+                       }
+               }
+       }
+}
+
+func (obj *AOInitData) deserialize(r io.Reader) {
+       {
+               var local300 uint8
+               {
+                       p := &local300
+                       *p = read8(r)
+               }
+               if local300 != (1) {
+                       chk(fmt.Errorf("const %v: %v", 1, local300))
+               }
+       }
+       var local301 []uint8
+       var local302 uint16
+       {
+               p := &local302
+               *p = read16(r)
+       }
+       (local301) = make([]uint8, local302)
+       {
+               _, err := io.ReadFull(r, (local301)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+
+               // For players.
+               Name     string
+               IsPlayer bool
+
+               ID AOID
+
+               Pos
+               Rot [3]float32
+
+               HP uint16
+
+               // See (de)serialize.fmt.
+               Msgs []AOMsg
+       }))(obj)).Name) = string(local301)
+       {
+               p := &(*(*(struct {
+
+                       // For players.
+                       Name     string
+                       IsPlayer bool
+
+                       ID AOID
+
+                       Pos
+                       Rot [3]float32
+
+                       HP uint16
+
+                       // See (de)serialize.fmt.
+                       Msgs []AOMsg
+               }))(obj)).IsPlayer
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+
+                       // For players.
+                       Name     string
+                       IsPlayer bool
+
+                       ID AOID
+
+                       Pos
+                       Rot [3]float32
+
+                       HP uint16
+
+                       // See (de)serialize.fmt.
+                       Msgs []AOMsg
+               }))(obj)).ID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+
+                       // For players.
+                       Name     string
+                       IsPlayer bool
+
+                       ID AOID
+
+                       Pos
+                       Rot [3]float32
+
+                       HP uint16
+
+                       // See (de)serialize.fmt.
+                       Msgs []AOMsg
+               }))(obj)).Pos).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+       for local303 := range (*(*(struct {
+
+               // For players.
+               Name     string
+               IsPlayer bool
+
+               ID AOID
+
+               Pos
+               Rot [3]float32
+
+               HP uint16
+
+               // See (de)serialize.fmt.
+               Msgs []AOMsg
+       }))(obj)).Rot {
+               {
+                       p := &((*(*(struct {
+
+                               // For players.
+                               Name     string
+                               IsPlayer bool
+
+                               ID AOID
+
+                               Pos
+                               Rot [3]float32
+
+                               HP uint16
+
+                               // See (de)serialize.fmt.
+                               Msgs []AOMsg
+                       }))(obj)).Rot)[local303]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       {
+               p := &(*(*(struct {
+
+                       // For players.
+                       Name     string
+                       IsPlayer bool
+
+                       ID AOID
+
+                       Pos
+                       Rot [3]float32
+
+                       HP uint16
+
+                       // See (de)serialize.fmt.
+                       Msgs []AOMsg
+               }))(obj)).HP
+               *p = read16(r)
+       }
+       {
+               p := &(*(*(struct {
+
+                       // For players.
+                       Name     string
+                       IsPlayer bool
+
+                       ID AOID
+
+                       Pos
+                       Rot [3]float32
+
+                       HP uint16
+
+                       // See (de)serialize.fmt.
+                       Msgs []AOMsg
+               }))(obj)).Msgs
+               { // For AOInitData.Msgs.
+                       *p = make([]AOMsg, read8(r))
+                       for i := range *p {
+                               r := &io.LimitedReader{r, int64(read32(r))}
+                               msg, err := readAOMsg(r)
+                               chk(err)
+                               (*p)[i] = msg
+                               if r.N > 0 {
+                                       chk(fmt.Errorf("%d bytes of trailing data", r.N))
+                               }
+                       }
+               }
+       }
+}
+
+func (obj *IDAOMsg) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID AOID
+                       //mt:lenhdr 16
+                       Msg AOMsg
+               }))(obj)).ID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+       {
+               ow := w
+               w := new(bytes.Buffer)
+               {
+                       x := (*(*(struct {
+                               ID AOID
+                               //mt:lenhdr 16
+                               Msg AOMsg
+                       }))(obj)).Msg
+                       writeAOMsg(w, x)
+               }
+               {
+                       buf := w
+                       w := ow
+                       if len((buf.Bytes())) > math.MaxUint16 {
+                               chk(ErrTooLong)
+                       }
+                       {
+                               x := uint16(len((buf.Bytes())))
+                               write16(w, uint16(x))
+                       }
+                       {
+                               _, err := w.Write((buf.Bytes())[:])
+                               chk(err)
+                       }
+               }
+       }
+}
+
+func (obj *IDAOMsg) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ID AOID
+                       //mt:lenhdr 16
+                       Msg AOMsg
+               }))(obj)).ID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+       {
+               var n uint16
+               {
+                       p := &n
+                       *p = read16(r)
+               }
+               r := &io.LimitedReader{r, int64(n)}
+               {
+                       p := &(*(*(struct {
+                               ID AOID
+                               //mt:lenhdr 16
+                               Msg AOMsg
+                       }))(obj)).Msg
+                       {
+                               var err error
+                               *p, err = readAOMsg(r)
+                               chk(err)
+                       }
+               }
+               if r.N > 0 {
+                       chk(fmt.Errorf("%d bytes of trailing data", r.N))
+               }
+       }
+}
+
+func (obj *ItemDef) serialize(w io.Writer) {
+       {
+               ow := w
+               w := new(bytes.Buffer)
+               {
+                       local304 := uint8(6)
+                       {
+                               x := local304
+                               write8(w, uint8(x))
+                       }
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Type).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ItemType", err))
+               }
+               if len(([]byte((*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).Name))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Name))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Name))[:])
+                       chk(err)
+               }
+               if len(([]byte((*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).Desc))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Desc))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Desc))[:])
+                       chk(err)
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).InvImg).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).WieldImg).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+               for local305 := range (*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).WieldScale {
+                       {
+                               x := ((*(*(struct {
+                                       Type ItemType
+
+                                       Name, Desc string
+
+                                       InvImg, WieldImg Texture
+                                       WieldScale       [3]float32
+
+                                       StackMax uint16
+
+                                       Usable          bool
+                                       CanPointLiquids bool
+
+                                       ToolCaps ToolCaps
+
+                                       Groups []Group
+
+                                       PlacePredict string
+
+                                       PlaceSnd, PlaceFailSnd SoundDef
+
+                                       PointRange float32
+
+                                       // Set index in Palette with "palette_index" item meta field,
+                                       // this overrides Color.
+                                       Palette Texture
+                                       Color   color.NRGBA
+
+                                       // Texture overlays.
+                                       InvOverlay, WieldOverlay Texture
+
+                                       ShortDesc string
+
+                                       PlaceParam2 byte
+                               }))(obj)).WieldScale)[local305]
+                               write32(w, math.Float32bits(x))
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).StackMax
+                       write16(w, uint16(x))
+               }
+               {
+                       x := (*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Usable
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               {
+                       x := (*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).CanPointLiquids
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).ToolCaps).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ToolCaps", err))
+               }
+               if len(((*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).Groups)) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Groups)))
+                       write16(w, uint16(x))
+               }
+               for local306 := range (*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).Groups {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Type ItemType
+
+                                       Name, Desc string
+
+                                       InvImg, WieldImg Texture
+                                       WieldScale       [3]float32
+
+                                       StackMax uint16
+
+                                       Usable          bool
+                                       CanPointLiquids bool
+
+                                       ToolCaps ToolCaps
+
+                                       Groups []Group
+
+                                       PlacePredict string
+
+                                       PlaceSnd, PlaceFailSnd SoundDef
+
+                                       PointRange float32
+
+                                       // Set index in Palette with "palette_index" item meta field,
+                                       // this overrides Color.
+                                       Palette Texture
+                                       Color   color.NRGBA
+
+                                       // Texture overlays.
+                                       InvOverlay, WieldOverlay Texture
+
+                                       ShortDesc string
+
+                                       PlaceParam2 byte
+                               }))(obj)).Groups)[local306]).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Group", err))
+                       }
+               }
+               if len(([]byte((*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).PlacePredict))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).PlacePredict))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).PlacePredict))[:])
+                       chk(err)
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).PlaceSnd).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundDef", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).PlaceFailSnd).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundDef", err))
+               }
+               {
+                       x := (*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).PointRange
+                       write32(w, math.Float32bits(x))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Palette).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+               {
+                       x := (*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Color
+                       w.Write([]byte{x.A, x.R, x.G, x.B})
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).InvOverlay).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).WieldOverlay).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+               if len(([]byte((*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).ShortDesc))) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(([]byte((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).ShortDesc))))
+                       write16(w, uint16(x))
+               }
+               {
+                       _, err := w.Write(([]byte((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).ShortDesc))[:])
+                       chk(err)
+               }
+               {
+                       x := (*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).PlaceParam2
+                       write8(w, uint8(x))
+               }
+               {
+                       buf := w
+                       w := ow
+                       if len((buf.Bytes())) > math.MaxUint16 {
+                               chk(ErrTooLong)
+                       }
+                       {
+                               x := uint16(len((buf.Bytes())))
+                               write16(w, uint16(x))
+                       }
+                       {
+                               _, err := w.Write((buf.Bytes())[:])
+                               chk(err)
+                       }
+               }
+       }
+}
+
+func (obj *ItemDef) deserialize(r io.Reader) {
+       {
+               var n uint16
+               {
+                       p := &n
+                       *p = read16(r)
+               }
+               r := &io.LimitedReader{r, int64(n)}
+               {
+                       var local307 uint8
+                       {
+                               p := &local307
+                               *p = read8(r)
+                       }
+                       if local307 != (6) {
+                               chk(fmt.Errorf("const %v: %v", 6, local307))
+                       }
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Type).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ItemType", err))
+               }
+               var local308 []uint8
+               var local309 uint16
+               {
+                       p := &local309
+                       *p = read16(r)
+               }
+               (local308) = make([]uint8, local309)
+               {
+                       _, err := io.ReadFull(r, (local308)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).Name) = string(local308)
+               var local310 []uint8
+               var local311 uint16
+               {
+                       p := &local311
+                       *p = read16(r)
+               }
+               (local310) = make([]uint8, local311)
+               {
+                       _, err := io.ReadFull(r, (local310)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).Desc) = string(local310)
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).InvImg).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).WieldImg).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+               for local312 := range (*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).WieldScale {
+                       {
+                               p := &((*(*(struct {
+                                       Type ItemType
+
+                                       Name, Desc string
+
+                                       InvImg, WieldImg Texture
+                                       WieldScale       [3]float32
+
+                                       StackMax uint16
+
+                                       Usable          bool
+                                       CanPointLiquids bool
+
+                                       ToolCaps ToolCaps
+
+                                       Groups []Group
+
+                                       PlacePredict string
+
+                                       PlaceSnd, PlaceFailSnd SoundDef
+
+                                       PointRange float32
+
+                                       // Set index in Palette with "palette_index" item meta field,
+                                       // this overrides Color.
+                                       Palette Texture
+                                       Color   color.NRGBA
+
+                                       // Texture overlays.
+                                       InvOverlay, WieldOverlay Texture
+
+                                       ShortDesc string
+
+                                       PlaceParam2 byte
+                               }))(obj)).WieldScale)[local312]
+                               *p = math.Float32frombits(read32(r))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).StackMax
+                       *p = read16(r)
+               }
+               {
+                       p := &(*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Usable
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               {
+                       p := &(*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).CanPointLiquids
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).ToolCaps).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ToolCaps", err))
+               }
+               var local313 uint16
+               {
+                       p := &local313
+                       *p = read16(r)
+               }
+               ((*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).Groups) = make([]Group, local313)
+               for local314 := range (*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).Groups {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Type ItemType
+
+                                       Name, Desc string
+
+                                       InvImg, WieldImg Texture
+                                       WieldScale       [3]float32
+
+                                       StackMax uint16
+
+                                       Usable          bool
+                                       CanPointLiquids bool
+
+                                       ToolCaps ToolCaps
+
+                                       Groups []Group
+
+                                       PlacePredict string
+
+                                       PlaceSnd, PlaceFailSnd SoundDef
+
+                                       PointRange float32
+
+                                       // Set index in Palette with "palette_index" item meta field,
+                                       // this overrides Color.
+                                       Palette Texture
+                                       Color   color.NRGBA
+
+                                       // Texture overlays.
+                                       InvOverlay, WieldOverlay Texture
+
+                                       ShortDesc string
+
+                                       PlaceParam2 byte
+                               }))(obj)).Groups)[local314]).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Group", err))
+                       }
+               }
+               var local315 []uint8
+               var local316 uint16
+               {
+                       p := &local316
+                       *p = read16(r)
+               }
+               (local315) = make([]uint8, local316)
+               {
+                       _, err := io.ReadFull(r, (local315)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).PlacePredict) = string(local315)
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).PlaceSnd).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundDef", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).PlaceFailSnd).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.SoundDef", err))
+               }
+               {
+                       p := &(*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).PointRange
+                       *p = math.Float32frombits(read32(r))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Palette).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+               {
+                       p := &(*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).Color
+                       *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).InvOverlay).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).WieldOverlay).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+               var local317 []uint8
+               var local318 uint16
+               {
+                       p := &local318
+                       *p = read16(r)
+               }
+               (local317) = make([]uint8, local318)
+               {
+                       _, err := io.ReadFull(r, (local317)[:])
+                       chk(err)
+               }
+               ((*(*(struct {
+                       Type ItemType
+
+                       Name, Desc string
+
+                       InvImg, WieldImg Texture
+                       WieldScale       [3]float32
+
+                       StackMax uint16
+
+                       Usable          bool
+                       CanPointLiquids bool
+
+                       ToolCaps ToolCaps
+
+                       Groups []Group
+
+                       PlacePredict string
+
+                       PlaceSnd, PlaceFailSnd SoundDef
+
+                       PointRange float32
+
+                       // Set index in Palette with "palette_index" item meta field,
+                       // this overrides Color.
+                       Palette Texture
+                       Color   color.NRGBA
+
+                       // Texture overlays.
+                       InvOverlay, WieldOverlay Texture
+
+                       ShortDesc string
+
+                       PlaceParam2 byte
+               }))(obj)).ShortDesc) = string(local317)
+               {
+                       p := &(*(*(struct {
+                               Type ItemType
+
+                               Name, Desc string
+
+                               InvImg, WieldImg Texture
+                               WieldScale       [3]float32
+
+                               StackMax uint16
+
+                               Usable          bool
+                               CanPointLiquids bool
+
+                               ToolCaps ToolCaps
+
+                               Groups []Group
+
+                               PlacePredict string
+
+                               PlaceSnd, PlaceFailSnd SoundDef
+
+                               PointRange float32
+
+                               // Set index in Palette with "palette_index" item meta field,
+                               // this overrides Color.
+                               Palette Texture
+                               Color   color.NRGBA
+
+                               // Texture overlays.
+                               InvOverlay, WieldOverlay Texture
+
+                               ShortDesc string
+
+                               PlaceParam2 byte
+                       }))(obj)).PlaceParam2
+                       *p = read8(r)
+               }
+               if r.N > 0 {
+                       chk(fmt.Errorf("%d bytes of trailing data", r.N))
+               }
+       }
+}
+
+func (obj *SoundSrcType) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *SoundSrcType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *TileAnim) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Type AnimType
+
+                       //mt:if %s.Type == SpritesheetAnim
+                       AspectRatio [2]uint8
+
+                       //mt:if %s.Type == VerticalFrameAnim
+                       NFrames [2]uint16
+
+                       //mt:if %s.Type != NoAnim
+                       Duration float32 // in seconds
+
+               }))(obj)).Type).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AnimType", err))
+       }
+       if !((*(*(struct {
+               Type AnimType
+
+               //mt:if %s.Type == SpritesheetAnim
+               AspectRatio [2]uint8
+
+               //mt:if %s.Type == VerticalFrameAnim
+               NFrames [2]uint16
+
+               //mt:if %s.Type != NoAnim
+               Duration float32 // in seconds
+
+       }))(obj)).Type < maxAnim) {
+               chk(errors.New("assertion failed: %s.Type < maxAnim"))
+       }
+       if (*(*(struct {
+               Type AnimType
+
+               //mt:if %s.Type == SpritesheetAnim
+               AspectRatio [2]uint8
+
+               //mt:if %s.Type == VerticalFrameAnim
+               NFrames [2]uint16
+
+               //mt:if %s.Type != NoAnim
+               Duration float32 // in seconds
+
+       }))(obj)).Type == SpritesheetAnim {
+               {
+                       _, err := w.Write(((*(*(struct {
+                               Type AnimType
+
+                               //mt:if %s.Type == SpritesheetAnim
+                               AspectRatio [2]uint8
+
+                               //mt:if %s.Type == VerticalFrameAnim
+                               NFrames [2]uint16
+
+                               //mt:if %s.Type != NoAnim
+                               Duration float32 // in seconds
+
+                       }))(obj)).AspectRatio)[:])
+                       chk(err)
+               }
+       }
+       if (*(*(struct {
+               Type AnimType
+
+               //mt:if %s.Type == SpritesheetAnim
+               AspectRatio [2]uint8
+
+               //mt:if %s.Type == VerticalFrameAnim
+               NFrames [2]uint16
+
+               //mt:if %s.Type != NoAnim
+               Duration float32 // in seconds
+
+       }))(obj)).Type == VerticalFrameAnim {
+               for local319 := range (*(*(struct {
+                       Type AnimType
+
+                       //mt:if %s.Type == SpritesheetAnim
+                       AspectRatio [2]uint8
+
+                       //mt:if %s.Type == VerticalFrameAnim
+                       NFrames [2]uint16
+
+                       //mt:if %s.Type != NoAnim
+                       Duration float32 // in seconds
+
+               }))(obj)).NFrames {
+                       {
+                               x := ((*(*(struct {
+                                       Type AnimType
+
+                                       //mt:if %s.Type == SpritesheetAnim
+                                       AspectRatio [2]uint8
+
+                                       //mt:if %s.Type == VerticalFrameAnim
+                                       NFrames [2]uint16
+
+                                       //mt:if %s.Type != NoAnim
+                                       Duration float32 // in seconds
+
+                               }))(obj)).NFrames)[local319]
+                               write16(w, uint16(x))
+                       }
+               }
+       }
+       if (*(*(struct {
+               Type AnimType
+
+               //mt:if %s.Type == SpritesheetAnim
+               AspectRatio [2]uint8
+
+               //mt:if %s.Type == VerticalFrameAnim
+               NFrames [2]uint16
+
+               //mt:if %s.Type != NoAnim
+               Duration float32 // in seconds
+
+       }))(obj)).Type != NoAnim {
+               {
+                       x := (*(*(struct {
+                               Type AnimType
+
+                               //mt:if %s.Type == SpritesheetAnim
+                               AspectRatio [2]uint8
+
+                               //mt:if %s.Type == VerticalFrameAnim
+                               NFrames [2]uint16
+
+                               //mt:if %s.Type != NoAnim
+                               Duration float32 // in seconds
+
+                       }))(obj)).Duration
+                       write32(w, math.Float32bits(x))
+               }
+       }
+}
+
+func (obj *TileAnim) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Type AnimType
+
+                       //mt:if %s.Type == SpritesheetAnim
+                       AspectRatio [2]uint8
+
+                       //mt:if %s.Type == VerticalFrameAnim
+                       NFrames [2]uint16
+
+                       //mt:if %s.Type != NoAnim
+                       Duration float32 // in seconds
+
+               }))(obj)).Type).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AnimType", err))
+       }
+       if !((*(*(struct {
+               Type AnimType
+
+               //mt:if %s.Type == SpritesheetAnim
+               AspectRatio [2]uint8
+
+               //mt:if %s.Type == VerticalFrameAnim
+               NFrames [2]uint16
+
+               //mt:if %s.Type != NoAnim
+               Duration float32 // in seconds
+
+       }))(obj)).Type < maxAnim) {
+               chk(errors.New("assertion failed: %s.Type < maxAnim"))
+       }
+       if (*(*(struct {
+               Type AnimType
+
+               //mt:if %s.Type == SpritesheetAnim
+               AspectRatio [2]uint8
+
+               //mt:if %s.Type == VerticalFrameAnim
+               NFrames [2]uint16
+
+               //mt:if %s.Type != NoAnim
+               Duration float32 // in seconds
+
+       }))(obj)).Type == SpritesheetAnim {
+               {
+                       _, err := io.ReadFull(r, ((*(*(struct {
+                               Type AnimType
+
+                               //mt:if %s.Type == SpritesheetAnim
+                               AspectRatio [2]uint8
+
+                               //mt:if %s.Type == VerticalFrameAnim
+                               NFrames [2]uint16
+
+                               //mt:if %s.Type != NoAnim
+                               Duration float32 // in seconds
+
+                       }))(obj)).AspectRatio)[:])
+                       chk(err)
+               }
+       }
+       if (*(*(struct {
+               Type AnimType
+
+               //mt:if %s.Type == SpritesheetAnim
+               AspectRatio [2]uint8
+
+               //mt:if %s.Type == VerticalFrameAnim
+               NFrames [2]uint16
+
+               //mt:if %s.Type != NoAnim
+               Duration float32 // in seconds
+
+       }))(obj)).Type == VerticalFrameAnim {
+               for local320 := range (*(*(struct {
+                       Type AnimType
+
+                       //mt:if %s.Type == SpritesheetAnim
+                       AspectRatio [2]uint8
+
+                       //mt:if %s.Type == VerticalFrameAnim
+                       NFrames [2]uint16
+
+                       //mt:if %s.Type != NoAnim
+                       Duration float32 // in seconds
+
+               }))(obj)).NFrames {
+                       {
+                               p := &((*(*(struct {
+                                       Type AnimType
+
+                                       //mt:if %s.Type == SpritesheetAnim
+                                       AspectRatio [2]uint8
+
+                                       //mt:if %s.Type == VerticalFrameAnim
+                                       NFrames [2]uint16
+
+                                       //mt:if %s.Type != NoAnim
+                                       Duration float32 // in seconds
+
+                               }))(obj)).NFrames)[local320]
+                               *p = read16(r)
+                       }
+               }
+       }
+       if (*(*(struct {
+               Type AnimType
+
+               //mt:if %s.Type == SpritesheetAnim
+               AspectRatio [2]uint8
+
+               //mt:if %s.Type == VerticalFrameAnim
+               NFrames [2]uint16
+
+               //mt:if %s.Type != NoAnim
+               Duration float32 // in seconds
+
+       }))(obj)).Type != NoAnim {
+               {
+                       p := &(*(*(struct {
+                               Type AnimType
+
+                               //mt:if %s.Type == SpritesheetAnim
+                               AspectRatio [2]uint8
+
+                               //mt:if %s.Type == VerticalFrameAnim
+                               NFrames [2]uint16
+
+                               //mt:if %s.Type != NoAnim
+                               Duration float32 // in seconds
+
+                       }))(obj)).Duration
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+}
+
+func (obj *Content) serialize(w io.Writer) {
+       {
+               x := *(*(uint16))(obj)
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *Content) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint16))(obj)
+               *p = read16(r)
+       }
+}
+
+func (obj *ParticleSpawnerID) serialize(w io.Writer) {
+       {
+               x := *(*(uint32))(obj)
+               write32(w, uint32(x))
+       }
+}
+
+func (obj *ParticleSpawnerID) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint32))(obj)
+               *p = read32(r)
+       }
+}
+
+func (obj *HUDID) serialize(w io.Writer) {
+       {
+               x := *(*(uint32))(obj)
+               write32(w, uint32(x))
+       }
+}
+
+func (obj *HUDID) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint32))(obj)
+               *p = read32(r)
+       }
+}
+
+func (obj *HUDType) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *HUDType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *HUDField) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *HUDField) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *HUDFlags) serialize(w io.Writer) {
+       {
+               x := *(*(uint32))(obj)
+               write32(w, uint32(x))
+       }
+}
+
+func (obj *HUDFlags) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint32))(obj)
+               *p = read32(r)
+       }
+}
+
+func (obj *HotbarParam) serialize(w io.Writer) {
+       {
+               x := *(*(uint16))(obj)
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *HotbarParam) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint16))(obj)
+               *p = read16(r)
+       }
+}
+
+func (obj *Texture) serialize(w io.Writer) {
+       if len(([]byte(*(*(string))(obj)))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte(*(*(string))(obj)))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte(*(*(string))(obj)))[:])
+               chk(err)
+       }
+}
+
+func (obj *Texture) deserialize(r io.Reader) {
+       var local321 []uint8
+       var local322 uint16
+       {
+               p := &local322
+               *p = read16(r)
+       }
+       (local321) = make([]uint8, local322)
+       {
+               _, err := io.ReadFull(r, (local321)[:])
+               chk(err)
+       }
+       (*(*(string))(obj)) = string(local321)
+}
+
+func (obj *PlayerListUpdateType) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *PlayerListUpdateType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *ModChanSig) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *ModChanSig) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *AOProps) serialize(w io.Writer) {
+       {
+               local323 := uint8(4)
+               {
+                       x := local323
+                       write8(w, uint8(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).MaxHP
+               write16(w, uint16(x))
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).CollideWithNodes
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Weight
+               write32(w, math.Float32bits(x))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).ColBox).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).SelBox).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Pointable
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if len(([]byte((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Visual))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Visual))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Visual))[:])
+               chk(err)
+       }
+       for local324 := range (*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).VisualSize {
+               {
+                       x := ((*(*(struct {
+                               MaxHP            uint16 // Player only.
+                               CollideWithNodes bool
+                               Weight           float32 // deprecated
+                               ColBox, SelBox   Box
+                               Pointable        bool
+                               Visual           string
+                               VisualSize       [3]float32
+                               Textures         []Texture
+                               SpritesheetSize  [2]int16 // in sprites.
+                               SpritePos        [2]int16 // in sprite sheet.
+                               Visible          bool
+                               MakeFootstepSnds bool
+                               RotateSpeed      float32 // in radians per second.
+                               Mesh             string
+                               Colors           []color.NRGBA
+                               CollideWithAOs   bool
+                               StepHeight       float32
+                               FaceRotateDir    bool
+                               FaceRotateDirOff float32 // in degrees.
+                               BackfaceCull     bool
+                               Nametag          string
+                               NametagColor     color.NRGBA
+                               FaceRotateSpeed  float32 // in degrees per second.
+                               Infotext         string
+                               Itemstring       string
+                               Glow             int8
+                               MaxBreath        uint16  // Player only.
+                               EyeHeight        float32 // Player only.
+                               ZoomFOV          float32 // in degrees. Player only.
+                               UseTextureAlpha  bool
+                               DmgTextureMod    Texture // suffix
+                               Shaded           bool
+                               ShowOnMinimap    bool
+                               NametagBG        color.NRGBA
+                       }))(obj)).VisualSize)[local324]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       if len(((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Textures)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Textures)))
+               write16(w, uint16(x))
+       }
+       for local325 := range (*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Textures {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               MaxHP            uint16 // Player only.
+                               CollideWithNodes bool
+                               Weight           float32 // deprecated
+                               ColBox, SelBox   Box
+                               Pointable        bool
+                               Visual           string
+                               VisualSize       [3]float32
+                               Textures         []Texture
+                               SpritesheetSize  [2]int16 // in sprites.
+                               SpritePos        [2]int16 // in sprite sheet.
+                               Visible          bool
+                               MakeFootstepSnds bool
+                               RotateSpeed      float32 // in radians per second.
+                               Mesh             string
+                               Colors           []color.NRGBA
+                               CollideWithAOs   bool
+                               StepHeight       float32
+                               FaceRotateDir    bool
+                               FaceRotateDirOff float32 // in degrees.
+                               BackfaceCull     bool
+                               Nametag          string
+                               NametagColor     color.NRGBA
+                               FaceRotateSpeed  float32 // in degrees per second.
+                               Infotext         string
+                               Itemstring       string
+                               Glow             int8
+                               MaxBreath        uint16  // Player only.
+                               EyeHeight        float32 // Player only.
+                               ZoomFOV          float32 // in degrees. Player only.
+                               UseTextureAlpha  bool
+                               DmgTextureMod    Texture // suffix
+                               Shaded           bool
+                               ShowOnMinimap    bool
+                               NametagBG        color.NRGBA
+                       }))(obj)).Textures)[local325]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+       }
+       for local326 := range (*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).SpritesheetSize {
+               {
+                       x := ((*(*(struct {
+                               MaxHP            uint16 // Player only.
+                               CollideWithNodes bool
+                               Weight           float32 // deprecated
+                               ColBox, SelBox   Box
+                               Pointable        bool
+                               Visual           string
+                               VisualSize       [3]float32
+                               Textures         []Texture
+                               SpritesheetSize  [2]int16 // in sprites.
+                               SpritePos        [2]int16 // in sprite sheet.
+                               Visible          bool
+                               MakeFootstepSnds bool
+                               RotateSpeed      float32 // in radians per second.
+                               Mesh             string
+                               Colors           []color.NRGBA
+                               CollideWithAOs   bool
+                               StepHeight       float32
+                               FaceRotateDir    bool
+                               FaceRotateDirOff float32 // in degrees.
+                               BackfaceCull     bool
+                               Nametag          string
+                               NametagColor     color.NRGBA
+                               FaceRotateSpeed  float32 // in degrees per second.
+                               Infotext         string
+                               Itemstring       string
+                               Glow             int8
+                               MaxBreath        uint16  // Player only.
+                               EyeHeight        float32 // Player only.
+                               ZoomFOV          float32 // in degrees. Player only.
+                               UseTextureAlpha  bool
+                               DmgTextureMod    Texture // suffix
+                               Shaded           bool
+                               ShowOnMinimap    bool
+                               NametagBG        color.NRGBA
+                       }))(obj)).SpritesheetSize)[local326]
+                       write16(w, uint16(x))
+               }
+       }
+       for local327 := range (*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).SpritePos {
+               {
+                       x := ((*(*(struct {
+                               MaxHP            uint16 // Player only.
+                               CollideWithNodes bool
+                               Weight           float32 // deprecated
+                               ColBox, SelBox   Box
+                               Pointable        bool
+                               Visual           string
+                               VisualSize       [3]float32
+                               Textures         []Texture
+                               SpritesheetSize  [2]int16 // in sprites.
+                               SpritePos        [2]int16 // in sprite sheet.
+                               Visible          bool
+                               MakeFootstepSnds bool
+                               RotateSpeed      float32 // in radians per second.
+                               Mesh             string
+                               Colors           []color.NRGBA
+                               CollideWithAOs   bool
+                               StepHeight       float32
+                               FaceRotateDir    bool
+                               FaceRotateDirOff float32 // in degrees.
+                               BackfaceCull     bool
+                               Nametag          string
+                               NametagColor     color.NRGBA
+                               FaceRotateSpeed  float32 // in degrees per second.
+                               Infotext         string
+                               Itemstring       string
+                               Glow             int8
+                               MaxBreath        uint16  // Player only.
+                               EyeHeight        float32 // Player only.
+                               ZoomFOV          float32 // in degrees. Player only.
+                               UseTextureAlpha  bool
+                               DmgTextureMod    Texture // suffix
+                               Shaded           bool
+                               ShowOnMinimap    bool
+                               NametagBG        color.NRGBA
+                       }))(obj)).SpritePos)[local327]
+                       write16(w, uint16(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Visible
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).MakeFootstepSnds
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).RotateSpeed
+               write32(w, math.Float32bits(x))
+       }
+       if len(([]byte((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Mesh))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Mesh))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Mesh))[:])
+               chk(err)
+       }
+       if len(((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Colors)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Colors)))
+               write16(w, uint16(x))
+       }
+       for local328 := range (*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Colors {
+               {
+                       x := ((*(*(struct {
+                               MaxHP            uint16 // Player only.
+                               CollideWithNodes bool
+                               Weight           float32 // deprecated
+                               ColBox, SelBox   Box
+                               Pointable        bool
+                               Visual           string
+                               VisualSize       [3]float32
+                               Textures         []Texture
+                               SpritesheetSize  [2]int16 // in sprites.
+                               SpritePos        [2]int16 // in sprite sheet.
+                               Visible          bool
+                               MakeFootstepSnds bool
+                               RotateSpeed      float32 // in radians per second.
+                               Mesh             string
+                               Colors           []color.NRGBA
+                               CollideWithAOs   bool
+                               StepHeight       float32
+                               FaceRotateDir    bool
+                               FaceRotateDirOff float32 // in degrees.
+                               BackfaceCull     bool
+                               Nametag          string
+                               NametagColor     color.NRGBA
+                               FaceRotateSpeed  float32 // in degrees per second.
+                               Infotext         string
+                               Itemstring       string
+                               Glow             int8
+                               MaxBreath        uint16  // Player only.
+                               EyeHeight        float32 // Player only.
+                               ZoomFOV          float32 // in degrees. Player only.
+                               UseTextureAlpha  bool
+                               DmgTextureMod    Texture // suffix
+                               Shaded           bool
+                               ShowOnMinimap    bool
+                               NametagBG        color.NRGBA
+                       }))(obj)).Colors)[local328]
+                       w.Write([]byte{x.A, x.R, x.G, x.B})
+               }
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).CollideWithAOs
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).StepHeight
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).FaceRotateDir
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).FaceRotateDirOff
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).BackfaceCull
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if len(([]byte((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Nametag))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Nametag))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Nametag))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).NametagColor
+               w.Write([]byte{x.A, x.R, x.G, x.B})
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).FaceRotateSpeed
+               write32(w, math.Float32bits(x))
+       }
+       if len(([]byte((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Infotext))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Infotext))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Infotext))[:])
+               chk(err)
+       }
+       if len(([]byte((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Itemstring))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Itemstring))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Itemstring))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Glow
+               write8(w, uint8(x))
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).MaxBreath
+               write16(w, uint16(x))
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).EyeHeight
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).ZoomFOV
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).UseTextureAlpha
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).DmgTextureMod).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Shaded
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).ShowOnMinimap
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).NametagBG
+               w.Write([]byte{x.A, x.R, x.G, x.B})
+       }
+}
+
+func (obj *AOProps) deserialize(r io.Reader) {
+       {
+               var local329 uint8
+               {
+                       p := &local329
+                       *p = read8(r)
+               }
+               if local329 != (4) {
+                       chk(fmt.Errorf("const %v: %v", 4, local329))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).MaxHP
+               *p = read16(r)
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).CollideWithNodes
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Weight
+               *p = math.Float32frombits(read32(r))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).ColBox).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).SelBox).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Pointable
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       var local330 []uint8
+       var local331 uint16
+       {
+               p := &local331
+               *p = read16(r)
+       }
+       (local330) = make([]uint8, local331)
+       {
+               _, err := io.ReadFull(r, (local330)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Visual) = string(local330)
+       for local332 := range (*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).VisualSize {
+               {
+                       p := &((*(*(struct {
+                               MaxHP            uint16 // Player only.
+                               CollideWithNodes bool
+                               Weight           float32 // deprecated
+                               ColBox, SelBox   Box
+                               Pointable        bool
+                               Visual           string
+                               VisualSize       [3]float32
+                               Textures         []Texture
+                               SpritesheetSize  [2]int16 // in sprites.
+                               SpritePos        [2]int16 // in sprite sheet.
+                               Visible          bool
+                               MakeFootstepSnds bool
+                               RotateSpeed      float32 // in radians per second.
+                               Mesh             string
+                               Colors           []color.NRGBA
+                               CollideWithAOs   bool
+                               StepHeight       float32
+                               FaceRotateDir    bool
+                               FaceRotateDirOff float32 // in degrees.
+                               BackfaceCull     bool
+                               Nametag          string
+                               NametagColor     color.NRGBA
+                               FaceRotateSpeed  float32 // in degrees per second.
+                               Infotext         string
+                               Itemstring       string
+                               Glow             int8
+                               MaxBreath        uint16  // Player only.
+                               EyeHeight        float32 // Player only.
+                               ZoomFOV          float32 // in degrees. Player only.
+                               UseTextureAlpha  bool
+                               DmgTextureMod    Texture // suffix
+                               Shaded           bool
+                               ShowOnMinimap    bool
+                               NametagBG        color.NRGBA
+                       }))(obj)).VisualSize)[local332]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       var local333 uint16
+       {
+               p := &local333
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Textures) = make([]Texture, local333)
+       for local334 := range (*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Textures {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               MaxHP            uint16 // Player only.
+                               CollideWithNodes bool
+                               Weight           float32 // deprecated
+                               ColBox, SelBox   Box
+                               Pointable        bool
+                               Visual           string
+                               VisualSize       [3]float32
+                               Textures         []Texture
+                               SpritesheetSize  [2]int16 // in sprites.
+                               SpritePos        [2]int16 // in sprite sheet.
+                               Visible          bool
+                               MakeFootstepSnds bool
+                               RotateSpeed      float32 // in radians per second.
+                               Mesh             string
+                               Colors           []color.NRGBA
+                               CollideWithAOs   bool
+                               StepHeight       float32
+                               FaceRotateDir    bool
+                               FaceRotateDirOff float32 // in degrees.
+                               BackfaceCull     bool
+                               Nametag          string
+                               NametagColor     color.NRGBA
+                               FaceRotateSpeed  float32 // in degrees per second.
+                               Infotext         string
+                               Itemstring       string
+                               Glow             int8
+                               MaxBreath        uint16  // Player only.
+                               EyeHeight        float32 // Player only.
+                               ZoomFOV          float32 // in degrees. Player only.
+                               UseTextureAlpha  bool
+                               DmgTextureMod    Texture // suffix
+                               Shaded           bool
+                               ShowOnMinimap    bool
+                               NametagBG        color.NRGBA
+                       }))(obj)).Textures)[local334]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+               }
+       }
+       for local335 := range (*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).SpritesheetSize {
+               {
+                       p := &((*(*(struct {
+                               MaxHP            uint16 // Player only.
+                               CollideWithNodes bool
+                               Weight           float32 // deprecated
+                               ColBox, SelBox   Box
+                               Pointable        bool
+                               Visual           string
+                               VisualSize       [3]float32
+                               Textures         []Texture
+                               SpritesheetSize  [2]int16 // in sprites.
+                               SpritePos        [2]int16 // in sprite sheet.
+                               Visible          bool
+                               MakeFootstepSnds bool
+                               RotateSpeed      float32 // in radians per second.
+                               Mesh             string
+                               Colors           []color.NRGBA
+                               CollideWithAOs   bool
+                               StepHeight       float32
+                               FaceRotateDir    bool
+                               FaceRotateDirOff float32 // in degrees.
+                               BackfaceCull     bool
+                               Nametag          string
+                               NametagColor     color.NRGBA
+                               FaceRotateSpeed  float32 // in degrees per second.
+                               Infotext         string
+                               Itemstring       string
+                               Glow             int8
+                               MaxBreath        uint16  // Player only.
+                               EyeHeight        float32 // Player only.
+                               ZoomFOV          float32 // in degrees. Player only.
+                               UseTextureAlpha  bool
+                               DmgTextureMod    Texture // suffix
+                               Shaded           bool
+                               ShowOnMinimap    bool
+                               NametagBG        color.NRGBA
+                       }))(obj)).SpritesheetSize)[local335]
+                       *p = int16(read16(r))
+               }
+       }
+       for local336 := range (*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).SpritePos {
+               {
+                       p := &((*(*(struct {
+                               MaxHP            uint16 // Player only.
+                               CollideWithNodes bool
+                               Weight           float32 // deprecated
+                               ColBox, SelBox   Box
+                               Pointable        bool
+                               Visual           string
+                               VisualSize       [3]float32
+                               Textures         []Texture
+                               SpritesheetSize  [2]int16 // in sprites.
+                               SpritePos        [2]int16 // in sprite sheet.
+                               Visible          bool
+                               MakeFootstepSnds bool
+                               RotateSpeed      float32 // in radians per second.
+                               Mesh             string
+                               Colors           []color.NRGBA
+                               CollideWithAOs   bool
+                               StepHeight       float32
+                               FaceRotateDir    bool
+                               FaceRotateDirOff float32 // in degrees.
+                               BackfaceCull     bool
+                               Nametag          string
+                               NametagColor     color.NRGBA
+                               FaceRotateSpeed  float32 // in degrees per second.
+                               Infotext         string
+                               Itemstring       string
+                               Glow             int8
+                               MaxBreath        uint16  // Player only.
+                               EyeHeight        float32 // Player only.
+                               ZoomFOV          float32 // in degrees. Player only.
+                               UseTextureAlpha  bool
+                               DmgTextureMod    Texture // suffix
+                               Shaded           bool
+                               ShowOnMinimap    bool
+                               NametagBG        color.NRGBA
+                       }))(obj)).SpritePos)[local336]
+                       *p = int16(read16(r))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Visible
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).MakeFootstepSnds
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).RotateSpeed
+               *p = math.Float32frombits(read32(r))
+       }
+       var local337 []uint8
+       var local338 uint16
+       {
+               p := &local338
+               *p = read16(r)
+       }
+       (local337) = make([]uint8, local338)
+       {
+               _, err := io.ReadFull(r, (local337)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Mesh) = string(local337)
+       var local339 uint16
+       {
+               p := &local339
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Colors) = make([]color.NRGBA, local339)
+       for local340 := range (*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Colors {
+               {
+                       p := &((*(*(struct {
+                               MaxHP            uint16 // Player only.
+                               CollideWithNodes bool
+                               Weight           float32 // deprecated
+                               ColBox, SelBox   Box
+                               Pointable        bool
+                               Visual           string
+                               VisualSize       [3]float32
+                               Textures         []Texture
+                               SpritesheetSize  [2]int16 // in sprites.
+                               SpritePos        [2]int16 // in sprite sheet.
+                               Visible          bool
+                               MakeFootstepSnds bool
+                               RotateSpeed      float32 // in radians per second.
+                               Mesh             string
+                               Colors           []color.NRGBA
+                               CollideWithAOs   bool
+                               StepHeight       float32
+                               FaceRotateDir    bool
+                               FaceRotateDirOff float32 // in degrees.
+                               BackfaceCull     bool
+                               Nametag          string
+                               NametagColor     color.NRGBA
+                               FaceRotateSpeed  float32 // in degrees per second.
+                               Infotext         string
+                               Itemstring       string
+                               Glow             int8
+                               MaxBreath        uint16  // Player only.
+                               EyeHeight        float32 // Player only.
+                               ZoomFOV          float32 // in degrees. Player only.
+                               UseTextureAlpha  bool
+                               DmgTextureMod    Texture // suffix
+                               Shaded           bool
+                               ShowOnMinimap    bool
+                               NametagBG        color.NRGBA
+                       }))(obj)).Colors)[local340]
+                       *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).CollideWithAOs
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).StepHeight
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).FaceRotateDir
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).FaceRotateDirOff
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).BackfaceCull
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       var local341 []uint8
+       var local342 uint16
+       {
+               p := &local342
+               *p = read16(r)
+       }
+       (local341) = make([]uint8, local342)
+       {
+               _, err := io.ReadFull(r, (local341)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Nametag) = string(local341)
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).NametagColor
+               *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).FaceRotateSpeed
+               *p = math.Float32frombits(read32(r))
+       }
+       var local343 []uint8
+       var local344 uint16
+       {
+               p := &local344
+               *p = read16(r)
+       }
+       (local343) = make([]uint8, local344)
+       {
+               _, err := io.ReadFull(r, (local343)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Infotext) = string(local343)
+       var local345 []uint8
+       var local346 uint16
+       {
+               p := &local346
+               *p = read16(r)
+       }
+       (local345) = make([]uint8, local346)
+       {
+               _, err := io.ReadFull(r, (local345)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               MaxHP            uint16 // Player only.
+               CollideWithNodes bool
+               Weight           float32 // deprecated
+               ColBox, SelBox   Box
+               Pointable        bool
+               Visual           string
+               VisualSize       [3]float32
+               Textures         []Texture
+               SpritesheetSize  [2]int16 // in sprites.
+               SpritePos        [2]int16 // in sprite sheet.
+               Visible          bool
+               MakeFootstepSnds bool
+               RotateSpeed      float32 // in radians per second.
+               Mesh             string
+               Colors           []color.NRGBA
+               CollideWithAOs   bool
+               StepHeight       float32
+               FaceRotateDir    bool
+               FaceRotateDirOff float32 // in degrees.
+               BackfaceCull     bool
+               Nametag          string
+               NametagColor     color.NRGBA
+               FaceRotateSpeed  float32 // in degrees per second.
+               Infotext         string
+               Itemstring       string
+               Glow             int8
+               MaxBreath        uint16  // Player only.
+               EyeHeight        float32 // Player only.
+               ZoomFOV          float32 // in degrees. Player only.
+               UseTextureAlpha  bool
+               DmgTextureMod    Texture // suffix
+               Shaded           bool
+               ShowOnMinimap    bool
+               NametagBG        color.NRGBA
+       }))(obj)).Itemstring) = string(local345)
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Glow
+               *p = int8(read8(r))
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).MaxBreath
+               *p = read16(r)
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).EyeHeight
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).ZoomFOV
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).UseTextureAlpha
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).DmgTextureMod).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).Shaded
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).ShowOnMinimap
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       MaxHP            uint16 // Player only.
+                       CollideWithNodes bool
+                       Weight           float32 // deprecated
+                       ColBox, SelBox   Box
+                       Pointable        bool
+                       Visual           string
+                       VisualSize       [3]float32
+                       Textures         []Texture
+                       SpritesheetSize  [2]int16 // in sprites.
+                       SpritePos        [2]int16 // in sprite sheet.
+                       Visible          bool
+                       MakeFootstepSnds bool
+                       RotateSpeed      float32 // in radians per second.
+                       Mesh             string
+                       Colors           []color.NRGBA
+                       CollideWithAOs   bool
+                       StepHeight       float32
+                       FaceRotateDir    bool
+                       FaceRotateDirOff float32 // in degrees.
+                       BackfaceCull     bool
+                       Nametag          string
+                       NametagColor     color.NRGBA
+                       FaceRotateSpeed  float32 // in degrees per second.
+                       Infotext         string
+                       Itemstring       string
+                       Glow             int8
+                       MaxBreath        uint16  // Player only.
+                       EyeHeight        float32 // Player only.
+                       ZoomFOV          float32 // in degrees. Player only.
+                       UseTextureAlpha  bool
+                       DmgTextureMod    Texture // suffix
+                       Shaded           bool
+                       ShowOnMinimap    bool
+                       NametagBG        color.NRGBA
+               }))(obj)).NametagBG
+               *p = color.NRGBA{A: read8(r), R: read8(r), G: read8(r), B: read8(r)}
+       }
+}
+
+func (obj *AOPos) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos
+                       Vel, Acc Vec
+                       Rot      [3]float32
+
+                       Interpolate    bool
+                       End            bool
+                       UpdateInterval float32
+               }))(obj)).Pos).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos
+                       Vel, Acc Vec
+                       Rot      [3]float32
+
+                       Interpolate    bool
+                       End            bool
+                       UpdateInterval float32
+               }))(obj)).Vel).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos
+                       Vel, Acc Vec
+                       Rot      [3]float32
+
+                       Interpolate    bool
+                       End            bool
+                       UpdateInterval float32
+               }))(obj)).Acc).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+       for local347 := range (*(*(struct {
+               Pos
+               Vel, Acc Vec
+               Rot      [3]float32
+
+               Interpolate    bool
+               End            bool
+               UpdateInterval float32
+       }))(obj)).Rot {
+               {
+                       x := ((*(*(struct {
+                               Pos
+                               Vel, Acc Vec
+                               Rot      [3]float32
+
+                               Interpolate    bool
+                               End            bool
+                               UpdateInterval float32
+                       }))(obj)).Rot)[local347]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Pos
+                       Vel, Acc Vec
+                       Rot      [3]float32
+
+                       Interpolate    bool
+                       End            bool
+                       UpdateInterval float32
+               }))(obj)).Interpolate
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Pos
+                       Vel, Acc Vec
+                       Rot      [3]float32
+
+                       Interpolate    bool
+                       End            bool
+                       UpdateInterval float32
+               }))(obj)).End
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Pos
+                       Vel, Acc Vec
+                       Rot      [3]float32
+
+                       Interpolate    bool
+                       End            bool
+                       UpdateInterval float32
+               }))(obj)).UpdateInterval
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *AOPos) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos
+                       Vel, Acc Vec
+                       Rot      [3]float32
+
+                       Interpolate    bool
+                       End            bool
+                       UpdateInterval float32
+               }))(obj)).Pos).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Pos", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos
+                       Vel, Acc Vec
+                       Rot      [3]float32
+
+                       Interpolate    bool
+                       End            bool
+                       UpdateInterval float32
+               }))(obj)).Vel).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos
+                       Vel, Acc Vec
+                       Rot      [3]float32
+
+                       Interpolate    bool
+                       End            bool
+                       UpdateInterval float32
+               }))(obj)).Acc).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+       for local348 := range (*(*(struct {
+               Pos
+               Vel, Acc Vec
+               Rot      [3]float32
+
+               Interpolate    bool
+               End            bool
+               UpdateInterval float32
+       }))(obj)).Rot {
+               {
+                       p := &((*(*(struct {
+                               Pos
+                               Vel, Acc Vec
+                               Rot      [3]float32
+
+                               Interpolate    bool
+                               End            bool
+                               UpdateInterval float32
+                       }))(obj)).Rot)[local348]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Pos
+                       Vel, Acc Vec
+                       Rot      [3]float32
+
+                       Interpolate    bool
+                       End            bool
+                       UpdateInterval float32
+               }))(obj)).Interpolate
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Pos
+                       Vel, Acc Vec
+                       Rot      [3]float32
+
+                       Interpolate    bool
+                       End            bool
+                       UpdateInterval float32
+               }))(obj)).End
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Pos
+                       Vel, Acc Vec
+                       Rot      [3]float32
+
+                       Interpolate    bool
+                       End            bool
+                       UpdateInterval float32
+               }))(obj)).UpdateInterval
+               *p = math.Float32frombits(read32(r))
+       }
+}
+
+func (obj *AOSprite) serialize(w io.Writer) {
+       for local349 := range (*(*(struct {
+               Frame0          [2]int16
+               Frames          uint16
+               FrameDuration   float32
+               ViewAngleFrames bool
+       }))(obj)).Frame0 {
+               {
+                       x := ((*(*(struct {
+                               Frame0          [2]int16
+                               Frames          uint16
+                               FrameDuration   float32
+                               ViewAngleFrames bool
+                       }))(obj)).Frame0)[local349]
+                       write16(w, uint16(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Frame0          [2]int16
+                       Frames          uint16
+                       FrameDuration   float32
+                       ViewAngleFrames bool
+               }))(obj)).Frames
+               write16(w, uint16(x))
+       }
+       {
+               x := (*(*(struct {
+                       Frame0          [2]int16
+                       Frames          uint16
+                       FrameDuration   float32
+                       ViewAngleFrames bool
+               }))(obj)).FrameDuration
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Frame0          [2]int16
+                       Frames          uint16
+                       FrameDuration   float32
+                       ViewAngleFrames bool
+               }))(obj)).ViewAngleFrames
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+}
+
+func (obj *AOSprite) deserialize(r io.Reader) {
+       for local350 := range (*(*(struct {
+               Frame0          [2]int16
+               Frames          uint16
+               FrameDuration   float32
+               ViewAngleFrames bool
+       }))(obj)).Frame0 {
+               {
+                       p := &((*(*(struct {
+                               Frame0          [2]int16
+                               Frames          uint16
+                               FrameDuration   float32
+                               ViewAngleFrames bool
+                       }))(obj)).Frame0)[local350]
+                       *p = int16(read16(r))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Frame0          [2]int16
+                       Frames          uint16
+                       FrameDuration   float32
+                       ViewAngleFrames bool
+               }))(obj)).Frames
+               *p = read16(r)
+       }
+       {
+               p := &(*(*(struct {
+                       Frame0          [2]int16
+                       Frames          uint16
+                       FrameDuration   float32
+                       ViewAngleFrames bool
+               }))(obj)).FrameDuration
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Frame0          [2]int16
+                       Frames          uint16
+                       FrameDuration   float32
+                       ViewAngleFrames bool
+               }))(obj)).ViewAngleFrames
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+}
+
+func (obj *Group) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Name   string
+               Rating int16
+       }))(obj)).Name))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Name   string
+                       Rating int16
+               }))(obj)).Name))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Name   string
+                       Rating int16
+               }))(obj)).Name))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       Name   string
+                       Rating int16
+               }))(obj)).Rating
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *Group) deserialize(r io.Reader) {
+       var local351 []uint8
+       var local352 uint16
+       {
+               p := &local352
+               *p = read16(r)
+       }
+       (local351) = make([]uint8, local352)
+       {
+               _, err := io.ReadFull(r, (local351)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Name   string
+               Rating int16
+       }))(obj)).Name) = string(local351)
+       {
+               p := &(*(*(struct {
+                       Name   string
+                       Rating int16
+               }))(obj)).Rating
+               *p = int16(read16(r))
+       }
+}
+
+func (obj *AOAnim) serialize(w io.Writer) {
+       for local353 := range (*(*(struct {
+               Frames [2]int32
+               Speed  float32
+               Blend  float32
+               NoLoop bool
+       }))(obj)).Frames {
+               {
+                       x := ((*(*(struct {
+                               Frames [2]int32
+                               Speed  float32
+                               Blend  float32
+                               NoLoop bool
+                       }))(obj)).Frames)[local353]
+                       write32(w, uint32(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Frames [2]int32
+                       Speed  float32
+                       Blend  float32
+                       NoLoop bool
+               }))(obj)).Speed
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Frames [2]int32
+                       Speed  float32
+                       Blend  float32
+                       NoLoop bool
+               }))(obj)).Blend
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Frames [2]int32
+                       Speed  float32
+                       Blend  float32
+                       NoLoop bool
+               }))(obj)).NoLoop
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+}
+
+func (obj *AOAnim) deserialize(r io.Reader) {
+       for local354 := range (*(*(struct {
+               Frames [2]int32
+               Speed  float32
+               Blend  float32
+               NoLoop bool
+       }))(obj)).Frames {
+               {
+                       p := &((*(*(struct {
+                               Frames [2]int32
+                               Speed  float32
+                               Blend  float32
+                               NoLoop bool
+                       }))(obj)).Frames)[local354]
+                       *p = int32(read32(r))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Frames [2]int32
+                       Speed  float32
+                       Blend  float32
+                       NoLoop bool
+               }))(obj)).Speed
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Frames [2]int32
+                       Speed  float32
+                       Blend  float32
+                       NoLoop bool
+               }))(obj)).Blend
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Frames [2]int32
+                       Speed  float32
+                       Blend  float32
+                       NoLoop bool
+               }))(obj)).NoLoop
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+}
+
+func (obj *AOBonePos) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos Vec
+                       Rot [3]float32
+               }))(obj)).Pos).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+       for local355 := range (*(*(struct {
+               Pos Vec
+               Rot [3]float32
+       }))(obj)).Rot {
+               {
+                       x := ((*(*(struct {
+                               Pos Vec
+                               Rot [3]float32
+                       }))(obj)).Rot)[local355]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+}
+
+func (obj *AOBonePos) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Pos Vec
+                       Rot [3]float32
+               }))(obj)).Pos).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+       for local356 := range (*(*(struct {
+               Pos Vec
+               Rot [3]float32
+       }))(obj)).Rot {
+               {
+                       p := &((*(*(struct {
+                               Pos Vec
+                               Rot [3]float32
+                       }))(obj)).Rot)[local356]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+}
+
+func (obj *AOAttach) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ParentID     AOID
+                       Bone         string
+                       Pos          Vec
+                       Rot          [3]float32
+                       ForceVisible bool
+               }))(obj)).ParentID).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+       if len(([]byte((*(*(struct {
+               ParentID     AOID
+               Bone         string
+               Pos          Vec
+               Rot          [3]float32
+               ForceVisible bool
+       }))(obj)).Bone))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       ParentID     AOID
+                       Bone         string
+                       Pos          Vec
+                       Rot          [3]float32
+                       ForceVisible bool
+               }))(obj)).Bone))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       ParentID     AOID
+                       Bone         string
+                       Pos          Vec
+                       Rot          [3]float32
+                       ForceVisible bool
+               }))(obj)).Bone))[:])
+               chk(err)
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ParentID     AOID
+                       Bone         string
+                       Pos          Vec
+                       Rot          [3]float32
+                       ForceVisible bool
+               }))(obj)).Pos).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+       for local357 := range (*(*(struct {
+               ParentID     AOID
+               Bone         string
+               Pos          Vec
+               Rot          [3]float32
+               ForceVisible bool
+       }))(obj)).Rot {
+               {
+                       x := ((*(*(struct {
+                               ParentID     AOID
+                               Bone         string
+                               Pos          Vec
+                               Rot          [3]float32
+                               ForceVisible bool
+                       }))(obj)).Rot)[local357]
+                       write32(w, math.Float32bits(x))
+               }
+       }
+       {
+               x := (*(*(struct {
+                       ParentID     AOID
+                       Bone         string
+                       Pos          Vec
+                       Rot          [3]float32
+                       ForceVisible bool
+               }))(obj)).ForceVisible
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+}
+
+func (obj *AOAttach) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ParentID     AOID
+                       Bone         string
+                       Pos          Vec
+                       Rot          [3]float32
+                       ForceVisible bool
+               }))(obj)).ParentID).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AOID", err))
+       }
+       var local358 []uint8
+       var local359 uint16
+       {
+               p := &local359
+               *p = read16(r)
+       }
+       (local358) = make([]uint8, local359)
+       {
+               _, err := io.ReadFull(r, (local358)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               ParentID     AOID
+               Bone         string
+               Pos          Vec
+               Rot          [3]float32
+               ForceVisible bool
+       }))(obj)).Bone) = string(local358)
+       if err := pcall(func() {
+               ((*(*(struct {
+                       ParentID     AOID
+                       Bone         string
+                       Pos          Vec
+                       Rot          [3]float32
+                       ForceVisible bool
+               }))(obj)).Pos).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+       }
+       for local360 := range (*(*(struct {
+               ParentID     AOID
+               Bone         string
+               Pos          Vec
+               Rot          [3]float32
+               ForceVisible bool
+       }))(obj)).Rot {
+               {
+                       p := &((*(*(struct {
+                               ParentID     AOID
+                               Bone         string
+                               Pos          Vec
+                               Rot          [3]float32
+                               ForceVisible bool
+                       }))(obj)).Rot)[local360]
+                       *p = math.Float32frombits(read32(r))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       ParentID     AOID
+                       Bone         string
+                       Pos          Vec
+                       Rot          [3]float32
+                       ForceVisible bool
+               }))(obj)).ForceVisible
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+}
+
+func (obj *AOPhysOverride) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Walk, Jump, Gravity float32
+
+                       // Player only.
+                       NoSneak, NoSneakGlitch, OldSneak bool
+               }))(obj)).Walk
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Walk, Jump, Gravity float32
+
+                       // Player only.
+                       NoSneak, NoSneakGlitch, OldSneak bool
+               }))(obj)).Jump
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Walk, Jump, Gravity float32
+
+                       // Player only.
+                       NoSneak, NoSneakGlitch, OldSneak bool
+               }))(obj)).Gravity
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Walk, Jump, Gravity float32
+
+                       // Player only.
+                       NoSneak, NoSneakGlitch, OldSneak bool
+               }))(obj)).NoSneak
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Walk, Jump, Gravity float32
+
+                       // Player only.
+                       NoSneak, NoSneakGlitch, OldSneak bool
+               }))(obj)).NoSneakGlitch
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+       {
+               x := (*(*(struct {
+                       Walk, Jump, Gravity float32
+
+                       // Player only.
+                       NoSneak, NoSneakGlitch, OldSneak bool
+               }))(obj)).OldSneak
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+}
+
+func (obj *AOPhysOverride) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Walk, Jump, Gravity float32
+
+                       // Player only.
+                       NoSneak, NoSneakGlitch, OldSneak bool
+               }))(obj)).Walk
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Walk, Jump, Gravity float32
+
+                       // Player only.
+                       NoSneak, NoSneakGlitch, OldSneak bool
+               }))(obj)).Jump
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Walk, Jump, Gravity float32
+
+                       // Player only.
+                       NoSneak, NoSneakGlitch, OldSneak bool
+               }))(obj)).Gravity
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Walk, Jump, Gravity float32
+
+                       // Player only.
+                       NoSneak, NoSneakGlitch, OldSneak bool
+               }))(obj)).NoSneak
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Walk, Jump, Gravity float32
+
+                       // Player only.
+                       NoSneak, NoSneakGlitch, OldSneak bool
+               }))(obj)).NoSneakGlitch
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+       {
+               p := &(*(*(struct {
+                       Walk, Jump, Gravity float32
+
+                       // Player only.
+                       NoSneak, NoSneakGlitch, OldSneak bool
+               }))(obj)).OldSneak
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+}
+
+func (obj *NodeMetaField) serialize(w io.Writer) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Field
+                       Private bool
+               }))(obj)).Field).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Field", err))
+       }
+       {
+               x := (*(*(struct {
+                       Field
+                       Private bool
+               }))(obj)).Private
+               if x {
+                       write8(w, 1)
+               } else {
+                       write8(w, 0)
+               }
+       }
+}
+
+func (obj *NodeMetaField) deserialize(r io.Reader) {
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Field
+                       Private bool
+               }))(obj)).Field).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Field", err))
+       }
+       {
+               p := &(*(*(struct {
+                       Field
+                       Private bool
+               }))(obj)).Private
+               switch n := read8(r); n {
+               case 0:
+                       *p = false
+               case 1:
+                       *p = true
+               default:
+                       chk(fmt.Errorf("invalid bool: %d", n))
+               }
+       }
+}
+
+func (obj *MinimapType) serialize(w io.Writer) {
+       {
+               x := *(*(uint16))(obj)
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *MinimapType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint16))(obj)
+               *p = read16(r)
+       }
+}
+
+func (obj *Param1Type) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *Param1Type) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *Param2Type) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *Param2Type) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *DrawType) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *DrawType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *TileDef) serialize(w io.Writer) {
+       {
+               local361 := uint8(6)
+               {
+                       x := local361
+                       write8(w, uint8(x))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Texture
+                       Anim  TileAnim
+                       Flags TileFlags
+
+                       //mt:if %s.Flags&TileColor != 0
+                       R, G, B uint8
+
+                       //mt:if %s.Flags&TileScale != 0
+                       Scale uint8
+
+                       //mt:if %s.Flags&TileAlign != 0
+                       Align AlignType
+               }))(obj)).Texture).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Texture
+                       Anim  TileAnim
+                       Flags TileFlags
+
+                       //mt:if %s.Flags&TileColor != 0
+                       R, G, B uint8
+
+                       //mt:if %s.Flags&TileScale != 0
+                       Scale uint8
+
+                       //mt:if %s.Flags&TileAlign != 0
+                       Align AlignType
+               }))(obj)).Anim).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileAnim", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Texture
+                       Anim  TileAnim
+                       Flags TileFlags
+
+                       //mt:if %s.Flags&TileColor != 0
+                       R, G, B uint8
+
+                       //mt:if %s.Flags&TileScale != 0
+                       Scale uint8
+
+                       //mt:if %s.Flags&TileAlign != 0
+                       Align AlignType
+               }))(obj)).Flags).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileFlags", err))
+       }
+       if (*(*(struct {
+               Texture
+               Anim  TileAnim
+               Flags TileFlags
+
+               //mt:if %s.Flags&TileColor != 0
+               R, G, B uint8
+
+               //mt:if %s.Flags&TileScale != 0
+               Scale uint8
+
+               //mt:if %s.Flags&TileAlign != 0
+               Align AlignType
+       }))(obj)).Flags&TileColor != 0 {
+               {
+                       x := (*(*(struct {
+                               Texture
+                               Anim  TileAnim
+                               Flags TileFlags
+
+                               //mt:if %s.Flags&TileColor != 0
+                               R, G, B uint8
+
+                               //mt:if %s.Flags&TileScale != 0
+                               Scale uint8
+
+                               //mt:if %s.Flags&TileAlign != 0
+                               Align AlignType
+                       }))(obj)).R
+                       write8(w, uint8(x))
+               }
+               {
+                       x := (*(*(struct {
+                               Texture
+                               Anim  TileAnim
+                               Flags TileFlags
+
+                               //mt:if %s.Flags&TileColor != 0
+                               R, G, B uint8
+
+                               //mt:if %s.Flags&TileScale != 0
+                               Scale uint8
+
+                               //mt:if %s.Flags&TileAlign != 0
+                               Align AlignType
+                       }))(obj)).G
+                       write8(w, uint8(x))
+               }
+               {
+                       x := (*(*(struct {
+                               Texture
+                               Anim  TileAnim
+                               Flags TileFlags
+
+                               //mt:if %s.Flags&TileColor != 0
+                               R, G, B uint8
+
+                               //mt:if %s.Flags&TileScale != 0
+                               Scale uint8
+
+                               //mt:if %s.Flags&TileAlign != 0
+                               Align AlignType
+                       }))(obj)).B
+                       write8(w, uint8(x))
+               }
+       }
+       if (*(*(struct {
+               Texture
+               Anim  TileAnim
+               Flags TileFlags
+
+               //mt:if %s.Flags&TileColor != 0
+               R, G, B uint8
+
+               //mt:if %s.Flags&TileScale != 0
+               Scale uint8
+
+               //mt:if %s.Flags&TileAlign != 0
+               Align AlignType
+       }))(obj)).Flags&TileScale != 0 {
+               {
+                       x := (*(*(struct {
+                               Texture
+                               Anim  TileAnim
+                               Flags TileFlags
+
+                               //mt:if %s.Flags&TileColor != 0
+                               R, G, B uint8
+
+                               //mt:if %s.Flags&TileScale != 0
+                               Scale uint8
+
+                               //mt:if %s.Flags&TileAlign != 0
+                               Align AlignType
+                       }))(obj)).Scale
+                       write8(w, uint8(x))
+               }
+       }
+       if (*(*(struct {
+               Texture
+               Anim  TileAnim
+               Flags TileFlags
+
+               //mt:if %s.Flags&TileColor != 0
+               R, G, B uint8
+
+               //mt:if %s.Flags&TileScale != 0
+               Scale uint8
+
+               //mt:if %s.Flags&TileAlign != 0
+               Align AlignType
+       }))(obj)).Flags&TileAlign != 0 {
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Texture
+                               Anim  TileAnim
+                               Flags TileFlags
+
+                               //mt:if %s.Flags&TileColor != 0
+                               R, G, B uint8
+
+                               //mt:if %s.Flags&TileScale != 0
+                               Scale uint8
+
+                               //mt:if %s.Flags&TileAlign != 0
+                               Align AlignType
+                       }))(obj)).Align).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AlignType", err))
+               }
+       }
+}
+
+func (obj *TileDef) deserialize(r io.Reader) {
+       {
+               var local362 uint8
+               {
+                       p := &local362
+                       *p = read8(r)
+               }
+               if local362 != (6) {
+                       chk(fmt.Errorf("const %v: %v", 6, local362))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Texture
+                       Anim  TileAnim
+                       Flags TileFlags
+
+                       //mt:if %s.Flags&TileColor != 0
+                       R, G, B uint8
+
+                       //mt:if %s.Flags&TileScale != 0
+                       Scale uint8
+
+                       //mt:if %s.Flags&TileAlign != 0
+                       Align AlignType
+               }))(obj)).Texture).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Texture", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Texture
+                       Anim  TileAnim
+                       Flags TileFlags
+
+                       //mt:if %s.Flags&TileColor != 0
+                       R, G, B uint8
+
+                       //mt:if %s.Flags&TileScale != 0
+                       Scale uint8
+
+                       //mt:if %s.Flags&TileAlign != 0
+                       Align AlignType
+               }))(obj)).Anim).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileAnim", err))
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Texture
+                       Anim  TileAnim
+                       Flags TileFlags
+
+                       //mt:if %s.Flags&TileColor != 0
+                       R, G, B uint8
+
+                       //mt:if %s.Flags&TileScale != 0
+                       Scale uint8
+
+                       //mt:if %s.Flags&TileAlign != 0
+                       Align AlignType
+               }))(obj)).Flags).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.TileFlags", err))
+       }
+       if (*(*(struct {
+               Texture
+               Anim  TileAnim
+               Flags TileFlags
+
+               //mt:if %s.Flags&TileColor != 0
+               R, G, B uint8
+
+               //mt:if %s.Flags&TileScale != 0
+               Scale uint8
+
+               //mt:if %s.Flags&TileAlign != 0
+               Align AlignType
+       }))(obj)).Flags&TileColor != 0 {
+               {
+                       p := &(*(*(struct {
+                               Texture
+                               Anim  TileAnim
+                               Flags TileFlags
+
+                               //mt:if %s.Flags&TileColor != 0
+                               R, G, B uint8
+
+                               //mt:if %s.Flags&TileScale != 0
+                               Scale uint8
+
+                               //mt:if %s.Flags&TileAlign != 0
+                               Align AlignType
+                       }))(obj)).R
+                       *p = read8(r)
+               }
+               {
+                       p := &(*(*(struct {
+                               Texture
+                               Anim  TileAnim
+                               Flags TileFlags
+
+                               //mt:if %s.Flags&TileColor != 0
+                               R, G, B uint8
+
+                               //mt:if %s.Flags&TileScale != 0
+                               Scale uint8
+
+                               //mt:if %s.Flags&TileAlign != 0
+                               Align AlignType
+                       }))(obj)).G
+                       *p = read8(r)
+               }
+               {
+                       p := &(*(*(struct {
+                               Texture
+                               Anim  TileAnim
+                               Flags TileFlags
+
+                               //mt:if %s.Flags&TileColor != 0
+                               R, G, B uint8
+
+                               //mt:if %s.Flags&TileScale != 0
+                               Scale uint8
+
+                               //mt:if %s.Flags&TileAlign != 0
+                               Align AlignType
+                       }))(obj)).B
+                       *p = read8(r)
+               }
+       }
+       if (*(*(struct {
+               Texture
+               Anim  TileAnim
+               Flags TileFlags
+
+               //mt:if %s.Flags&TileColor != 0
+               R, G, B uint8
+
+               //mt:if %s.Flags&TileScale != 0
+               Scale uint8
+
+               //mt:if %s.Flags&TileAlign != 0
+               Align AlignType
+       }))(obj)).Flags&TileScale != 0 {
+               {
+                       p := &(*(*(struct {
+                               Texture
+                               Anim  TileAnim
+                               Flags TileFlags
+
+                               //mt:if %s.Flags&TileColor != 0
+                               R, G, B uint8
+
+                               //mt:if %s.Flags&TileScale != 0
+                               Scale uint8
+
+                               //mt:if %s.Flags&TileAlign != 0
+                               Align AlignType
+                       }))(obj)).Scale
+                       *p = read8(r)
+               }
+       }
+       if (*(*(struct {
+               Texture
+               Anim  TileAnim
+               Flags TileFlags
+
+               //mt:if %s.Flags&TileColor != 0
+               R, G, B uint8
+
+               //mt:if %s.Flags&TileScale != 0
+               Scale uint8
+
+               //mt:if %s.Flags&TileAlign != 0
+               Align AlignType
+       }))(obj)).Flags&TileAlign != 0 {
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Texture
+                               Anim  TileAnim
+                               Flags TileFlags
+
+                               //mt:if %s.Flags&TileColor != 0
+                               R, G, B uint8
+
+                               //mt:if %s.Flags&TileScale != 0
+                               Scale uint8
+
+                               //mt:if %s.Flags&TileAlign != 0
+                               Align AlignType
+                       }))(obj)).Align).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.AlignType", err))
+               }
+       }
+}
+
+func (obj *WaveType) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *WaveType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *LiquidType) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *LiquidType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *NodeBox) serialize(w io.Writer) {
+       {
+               local363 := uint8(6)
+               {
+                       x := local363
+                       write8(w, uint8(x))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).Type).serialize(w)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.NodeBoxType", err))
+       }
+       if !((*(*(struct {
+               Type NodeBoxType
+
+               //mt:if %s.Type == MountedBox
+               WallTop, WallBot, WallSides Box
+
+               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+               Fixed []Box
+
+               //mt:if %s.Type == ConnectedBox
+               ConnDirs, DiscoDirs  DirBoxes
+               DiscoAll, DiscoSides []Box
+       }))(obj)).Type < maxBox) {
+               chk(errors.New("assertion failed: %s.Type < maxBox"))
+       }
+       if (*(*(struct {
+               Type NodeBoxType
+
+               //mt:if %s.Type == MountedBox
+               WallTop, WallBot, WallSides Box
+
+               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+               Fixed []Box
+
+               //mt:if %s.Type == ConnectedBox
+               ConnDirs, DiscoDirs  DirBoxes
+               DiscoAll, DiscoSides []Box
+       }))(obj)).Type == MountedBox {
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).WallTop).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).WallBot).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).WallSides).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+       if t := (*(*(struct {
+               Type NodeBoxType
+
+               //mt:if %s.Type == MountedBox
+               WallTop, WallBot, WallSides Box
+
+               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+               Fixed []Box
+
+               //mt:if %s.Type == ConnectedBox
+               ConnDirs, DiscoDirs  DirBoxes
+               DiscoAll, DiscoSides []Box
+       }))(obj)).Type; t == FixedBox || t == LeveledBox || t == ConnectedBox {
+               if len(((*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).Fixed)) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).Fixed)))
+                       write16(w, uint16(x))
+               }
+               for local364 := range (*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).Fixed {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Type NodeBoxType
+
+                                       //mt:if %s.Type == MountedBox
+                                       WallTop, WallBot, WallSides Box
+
+                                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                                       Fixed []Box
+
+                                       //mt:if %s.Type == ConnectedBox
+                                       ConnDirs, DiscoDirs  DirBoxes
+                                       DiscoAll, DiscoSides []Box
+                               }))(obj)).Fixed)[local364]).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+                       }
+               }
+       }
+       if (*(*(struct {
+               Type NodeBoxType
+
+               //mt:if %s.Type == MountedBox
+               WallTop, WallBot, WallSides Box
+
+               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+               Fixed []Box
+
+               //mt:if %s.Type == ConnectedBox
+               ConnDirs, DiscoDirs  DirBoxes
+               DiscoAll, DiscoSides []Box
+       }))(obj)).Type == ConnectedBox {
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).ConnDirs).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.DirBoxes", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).DiscoDirs).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.DirBoxes", err))
+               }
+               if len(((*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).DiscoAll)) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).DiscoAll)))
+                       write16(w, uint16(x))
+               }
+               for local365 := range (*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).DiscoAll {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Type NodeBoxType
+
+                                       //mt:if %s.Type == MountedBox
+                                       WallTop, WallBot, WallSides Box
+
+                                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                                       Fixed []Box
+
+                                       //mt:if %s.Type == ConnectedBox
+                                       ConnDirs, DiscoDirs  DirBoxes
+                                       DiscoAll, DiscoSides []Box
+                               }))(obj)).DiscoAll)[local365]).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+                       }
+               }
+               if len(((*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).DiscoSides)) > math.MaxUint16 {
+                       chk(ErrTooLong)
+               }
+               {
+                       x := uint16(len(((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).DiscoSides)))
+                       write16(w, uint16(x))
+               }
+               for local366 := range (*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).DiscoSides {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Type NodeBoxType
+
+                                       //mt:if %s.Type == MountedBox
+                                       WallTop, WallBot, WallSides Box
+
+                                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                                       Fixed []Box
+
+                                       //mt:if %s.Type == ConnectedBox
+                                       ConnDirs, DiscoDirs  DirBoxes
+                                       DiscoAll, DiscoSides []Box
+                               }))(obj)).DiscoSides)[local366]).serialize(w)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+                       }
+               }
+       }
+}
+
+func (obj *NodeBox) deserialize(r io.Reader) {
+       {
+               var local367 uint8
+               {
+                       p := &local367
+                       *p = read8(r)
+               }
+               if local367 != (6) {
+                       chk(fmt.Errorf("const %v: %v", 6, local367))
+               }
+       }
+       if err := pcall(func() {
+               ((*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).Type).deserialize(r)
+       }); err != nil {
+               if err == io.EOF {
+                       chk(io.EOF)
+               }
+               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.NodeBoxType", err))
+       }
+       if !((*(*(struct {
+               Type NodeBoxType
+
+               //mt:if %s.Type == MountedBox
+               WallTop, WallBot, WallSides Box
+
+               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+               Fixed []Box
+
+               //mt:if %s.Type == ConnectedBox
+               ConnDirs, DiscoDirs  DirBoxes
+               DiscoAll, DiscoSides []Box
+       }))(obj)).Type < maxBox) {
+               chk(errors.New("assertion failed: %s.Type < maxBox"))
+       }
+       if (*(*(struct {
+               Type NodeBoxType
+
+               //mt:if %s.Type == MountedBox
+               WallTop, WallBot, WallSides Box
+
+               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+               Fixed []Box
+
+               //mt:if %s.Type == ConnectedBox
+               ConnDirs, DiscoDirs  DirBoxes
+               DiscoAll, DiscoSides []Box
+       }))(obj)).Type == MountedBox {
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).WallTop).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).WallBot).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).WallSides).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+       if t := (*(*(struct {
+               Type NodeBoxType
+
+               //mt:if %s.Type == MountedBox
+               WallTop, WallBot, WallSides Box
+
+               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+               Fixed []Box
+
+               //mt:if %s.Type == ConnectedBox
+               ConnDirs, DiscoDirs  DirBoxes
+               DiscoAll, DiscoSides []Box
+       }))(obj)).Type; t == FixedBox || t == LeveledBox || t == ConnectedBox {
+               var local368 uint16
+               {
+                       p := &local368
+                       *p = read16(r)
+               }
+               ((*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).Fixed) = make([]Box, local368)
+               for local369 := range (*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).Fixed {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Type NodeBoxType
+
+                                       //mt:if %s.Type == MountedBox
+                                       WallTop, WallBot, WallSides Box
+
+                                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                                       Fixed []Box
+
+                                       //mt:if %s.Type == ConnectedBox
+                                       ConnDirs, DiscoDirs  DirBoxes
+                                       DiscoAll, DiscoSides []Box
+                               }))(obj)).Fixed)[local369]).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+                       }
+               }
+       }
+       if (*(*(struct {
+               Type NodeBoxType
+
+               //mt:if %s.Type == MountedBox
+               WallTop, WallBot, WallSides Box
+
+               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+               Fixed []Box
+
+               //mt:if %s.Type == ConnectedBox
+               ConnDirs, DiscoDirs  DirBoxes
+               DiscoAll, DiscoSides []Box
+       }))(obj)).Type == ConnectedBox {
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).ConnDirs).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.DirBoxes", err))
+               }
+               if err := pcall(func() {
+                       ((*(*(struct {
+                               Type NodeBoxType
+
+                               //mt:if %s.Type == MountedBox
+                               WallTop, WallBot, WallSides Box
+
+                               //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                               Fixed []Box
+
+                               //mt:if %s.Type == ConnectedBox
+                               ConnDirs, DiscoDirs  DirBoxes
+                               DiscoAll, DiscoSides []Box
+                       }))(obj)).DiscoDirs).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.DirBoxes", err))
+               }
+               var local370 uint16
+               {
+                       p := &local370
+                       *p = read16(r)
+               }
+               ((*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).DiscoAll) = make([]Box, local370)
+               for local371 := range (*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).DiscoAll {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Type NodeBoxType
+
+                                       //mt:if %s.Type == MountedBox
+                                       WallTop, WallBot, WallSides Box
+
+                                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                                       Fixed []Box
+
+                                       //mt:if %s.Type == ConnectedBox
+                                       ConnDirs, DiscoDirs  DirBoxes
+                                       DiscoAll, DiscoSides []Box
+                               }))(obj)).DiscoAll)[local371]).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+                       }
+               }
+               var local372 uint16
+               {
+                       p := &local372
+                       *p = read16(r)
+               }
+               ((*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).DiscoSides) = make([]Box, local372)
+               for local373 := range (*(*(struct {
+                       Type NodeBoxType
+
+                       //mt:if %s.Type == MountedBox
+                       WallTop, WallBot, WallSides Box
+
+                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                       Fixed []Box
+
+                       //mt:if %s.Type == ConnectedBox
+                       ConnDirs, DiscoDirs  DirBoxes
+                       DiscoAll, DiscoSides []Box
+               }))(obj)).DiscoSides {
+                       if err := pcall(func() {
+                               (((*(*(struct {
+                                       Type NodeBoxType
+
+                                       //mt:if %s.Type == MountedBox
+                                       WallTop, WallBot, WallSides Box
+
+                                       //mt:if t := %s.Type; t == FixedBox || t == LeveledBox || t == ConnectedBox
+                                       Fixed []Box
+
+                                       //mt:if %s.Type == ConnectedBox
+                                       ConnDirs, DiscoDirs  DirBoxes
+                                       DiscoAll, DiscoSides []Box
+                               }))(obj)).DiscoSides)[local373]).deserialize(r)
+                       }); err != nil {
+                               if err == io.EOF {
+                                       chk(io.EOF)
+                               }
+                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+                       }
+               }
+       }
+}
+
+func (obj *SoundDef) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Name              string
+               Gain, Pitch, Fade float32
+       }))(obj)).Name))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Name              string
+                       Gain, Pitch, Fade float32
+               }))(obj)).Name))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Name              string
+                       Gain, Pitch, Fade float32
+               }))(obj)).Name))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       Name              string
+                       Gain, Pitch, Fade float32
+               }))(obj)).Gain
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Name              string
+                       Gain, Pitch, Fade float32
+               }))(obj)).Pitch
+               write32(w, math.Float32bits(x))
+       }
+       {
+               x := (*(*(struct {
+                       Name              string
+                       Gain, Pitch, Fade float32
+               }))(obj)).Fade
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *SoundDef) deserialize(r io.Reader) {
+       var local374 []uint8
+       var local375 uint16
+       {
+               p := &local375
+               *p = read16(r)
+       }
+       (local374) = make([]uint8, local375)
+       {
+               _, err := io.ReadFull(r, (local374)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Name              string
+               Gain, Pitch, Fade float32
+       }))(obj)).Name) = string(local374)
+       {
+               p := &(*(*(struct {
+                       Name              string
+                       Gain, Pitch, Fade float32
+               }))(obj)).Gain
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Name              string
+                       Gain, Pitch, Fade float32
+               }))(obj)).Pitch
+               *p = math.Float32frombits(read32(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Name              string
+                       Gain, Pitch, Fade float32
+               }))(obj)).Fade
+               *p = math.Float32frombits(read32(r))
+       }
+}
+
+func (obj *AlphaUse) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *AlphaUse) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *Keys) serialize(w io.Writer) {
+       {
+               x := *(*(uint32))(obj)
+               write32(w, uint32(x))
+       }
+}
+
+func (obj *Keys) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint32))(obj)
+               *p = read32(r)
+       }
+}
+
+func (obj *MapBlkFlags) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *MapBlkFlags) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *LitFromBlks) serialize(w io.Writer) {
+       {
+               x := *(*(uint16))(obj)
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *LitFromBlks) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint16))(obj)
+               *p = read16(r)
+       }
+}
+
+func (obj *ItemType) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *ItemType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *ToolCaps) serialize(w io.Writer) {
+       if _ = (*(*(struct {
+               //mt:if _ = %s; false
+               NonNil bool `json:"-"`
+
+               AttackCooldown float32 `json:"full_punch_interval"`
+               MaxDropLvl     int16   `json:"max_drop_level"`
+
+               //mt:len32
+               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+               //mt:len32
+               DmgGroups []Group `json:"damage_groups"`
+
+               AttackUses uint16 `json:"punch_attack_uses"`
+       }))(obj)); false {
+               {
+                       x := (*(*(struct {
+                               //mt:if _ = %s; false
+                               NonNil bool `json:"-"`
+
+                               AttackCooldown float32 `json:"full_punch_interval"`
+                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                               //mt:len32
+                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                               //mt:len32
+                               DmgGroups []Group `json:"damage_groups"`
+
+                               AttackUses uint16 `json:"punch_attack_uses"`
+                       }))(obj)).NonNil
+                       if x {
+                               write8(w, 1)
+                       } else {
+                               write8(w, 0)
+                       }
+               }
+       }
+       {
+               ow := w
+               w := new(bytes.Buffer)
+               /*
+                  if r.N > 0 { (*(*(struct {
+                       //mt:if _ = %s; false
+                       NonNil  bool    `json:"-"`
+
+                       AttackCooldown  float32 `json:"full_punch_interval"`
+                       MaxDropLvl      int16   `json:"max_drop_level"`
+
+                       //mt:len32
+                       GroupCaps       []ToolGroupCaps `json:"groupcaps"`
+
+                       //mt:len32
+                       DmgGroups       []Group `json:"damage_groups"`
+
+                       AttackUses      uint16  `json:"punch_attack_uses"`
+                  }))(obj)).NonNil = true}; /**/{
+                       if (*(*(struct {
+                               //mt:if _ = %s; false
+                               NonNil bool `json:"-"`
+
+                               AttackCooldown float32 `json:"full_punch_interval"`
+                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                               //mt:len32
+                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                               //mt:len32
+                               DmgGroups []Group `json:"damage_groups"`
+
+                               AttackUses uint16 `json:"punch_attack_uses"`
+                       }))(obj)).NonNil {
+                               {
+                                       local376 := uint8(5)
+                                       {
+                                               x := local376
+                                               write8(w, uint8(x))
+                                       }
+                               }
+                               {
+                                       x := (*(*(struct {
+                                               //mt:if _ = %s; false
+                                               NonNil bool `json:"-"`
+
+                                               AttackCooldown float32 `json:"full_punch_interval"`
+                                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                               //mt:len32
+                                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                               //mt:len32
+                                               DmgGroups []Group `json:"damage_groups"`
+
+                                               AttackUses uint16 `json:"punch_attack_uses"`
+                                       }))(obj)).AttackCooldown
+                                       write32(w, math.Float32bits(x))
+                               }
+                               {
+                                       x := (*(*(struct {
+                                               //mt:if _ = %s; false
+                                               NonNil bool `json:"-"`
+
+                                               AttackCooldown float32 `json:"full_punch_interval"`
+                                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                               //mt:len32
+                                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                               //mt:len32
+                                               DmgGroups []Group `json:"damage_groups"`
+
+                                               AttackUses uint16 `json:"punch_attack_uses"`
+                                       }))(obj)).MaxDropLvl
+                                       write16(w, uint16(x))
+                               }
+                               if len(((*(*(struct {
+                                       //mt:if _ = %s; false
+                                       NonNil bool `json:"-"`
+
+                                       AttackCooldown float32 `json:"full_punch_interval"`
+                                       MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                       //mt:len32
+                                       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                       //mt:len32
+                                       DmgGroups []Group `json:"damage_groups"`
+
+                                       AttackUses uint16 `json:"punch_attack_uses"`
+                               }))(obj)).GroupCaps)) > math.MaxUint32 {
+                                       chk(ErrTooLong)
+                               }
+                               {
+                                       x := uint32(len(((*(*(struct {
+                                               //mt:if _ = %s; false
+                                               NonNil bool `json:"-"`
+
+                                               AttackCooldown float32 `json:"full_punch_interval"`
+                                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                               //mt:len32
+                                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                               //mt:len32
+                                               DmgGroups []Group `json:"damage_groups"`
+
+                                               AttackUses uint16 `json:"punch_attack_uses"`
+                                       }))(obj)).GroupCaps)))
+                                       write32(w, uint32(x))
+                               }
+                               for local377 := range (*(*(struct {
+                                       //mt:if _ = %s; false
+                                       NonNil bool `json:"-"`
+
+                                       AttackCooldown float32 `json:"full_punch_interval"`
+                                       MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                       //mt:len32
+                                       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                       //mt:len32
+                                       DmgGroups []Group `json:"damage_groups"`
+
+                                       AttackUses uint16 `json:"punch_attack_uses"`
+                               }))(obj)).GroupCaps {
+                                       if err := pcall(func() {
+                                               (((*(*(struct {
+                                                       //mt:if _ = %s; false
+                                                       NonNil bool `json:"-"`
+
+                                                       AttackCooldown float32 `json:"full_punch_interval"`
+                                                       MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                                       //mt:len32
+                                                       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                                       //mt:len32
+                                                       DmgGroups []Group `json:"damage_groups"`
+
+                                                       AttackUses uint16 `json:"punch_attack_uses"`
+                                               }))(obj)).GroupCaps)[local377]).serialize(w)
+                                       }); err != nil {
+                                               if err == io.EOF {
+                                                       chk(io.EOF)
+                                               }
+                                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ToolGroupCaps", err))
+                                       }
+                               }
+                               if len(((*(*(struct {
+                                       //mt:if _ = %s; false
+                                       NonNil bool `json:"-"`
+
+                                       AttackCooldown float32 `json:"full_punch_interval"`
+                                       MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                       //mt:len32
+                                       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                       //mt:len32
+                                       DmgGroups []Group `json:"damage_groups"`
+
+                                       AttackUses uint16 `json:"punch_attack_uses"`
+                               }))(obj)).DmgGroups)) > math.MaxUint32 {
+                                       chk(ErrTooLong)
+                               }
+                               {
+                                       x := uint32(len(((*(*(struct {
+                                               //mt:if _ = %s; false
+                                               NonNil bool `json:"-"`
+
+                                               AttackCooldown float32 `json:"full_punch_interval"`
+                                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                               //mt:len32
+                                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                               //mt:len32
+                                               DmgGroups []Group `json:"damage_groups"`
+
+                                               AttackUses uint16 `json:"punch_attack_uses"`
+                                       }))(obj)).DmgGroups)))
+                                       write32(w, uint32(x))
+                               }
+                               for local378 := range (*(*(struct {
+                                       //mt:if _ = %s; false
+                                       NonNil bool `json:"-"`
+
+                                       AttackCooldown float32 `json:"full_punch_interval"`
+                                       MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                       //mt:len32
+                                       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                       //mt:len32
+                                       DmgGroups []Group `json:"damage_groups"`
+
+                                       AttackUses uint16 `json:"punch_attack_uses"`
+                               }))(obj)).DmgGroups {
+                                       if err := pcall(func() {
+                                               (((*(*(struct {
+                                                       //mt:if _ = %s; false
+                                                       NonNil bool `json:"-"`
+
+                                                       AttackCooldown float32 `json:"full_punch_interval"`
+                                                       MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                                       //mt:len32
+                                                       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                                       //mt:len32
+                                                       DmgGroups []Group `json:"damage_groups"`
+
+                                                       AttackUses uint16 `json:"punch_attack_uses"`
+                                               }))(obj)).DmgGroups)[local378]).serialize(w)
+                                       }); err != nil {
+                                               if err == io.EOF {
+                                                       chk(io.EOF)
+                                               }
+                                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Group", err))
+                                       }
+                               }
+                               {
+                                       x := (*(*(struct {
+                                               //mt:if _ = %s; false
+                                               NonNil bool `json:"-"`
+
+                                               AttackCooldown float32 `json:"full_punch_interval"`
+                                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                               //mt:len32
+                                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                               //mt:len32
+                                               DmgGroups []Group `json:"damage_groups"`
+
+                                               AttackUses uint16 `json:"punch_attack_uses"`
+                                       }))(obj)).AttackUses
+                                       write16(w, uint16(x))
+                               }
+                       }
+               }
+               {
+                       buf := w
+                       w := ow
+                       if len((buf.Bytes())) > math.MaxUint16 {
+                               chk(ErrTooLong)
+                       }
+                       {
+                               x := uint16(len((buf.Bytes())))
+                               write16(w, uint16(x))
+                       }
+                       {
+                               _, err := w.Write((buf.Bytes())[:])
+                               chk(err)
+                       }
+               }
+       }
+}
+
+func (obj *ToolCaps) deserialize(r io.Reader) {
+       if _ = (*(*(struct {
+               //mt:if _ = %s; false
+               NonNil bool `json:"-"`
+
+               AttackCooldown float32 `json:"full_punch_interval"`
+               MaxDropLvl     int16   `json:"max_drop_level"`
+
+               //mt:len32
+               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+               //mt:len32
+               DmgGroups []Group `json:"damage_groups"`
+
+               AttackUses uint16 `json:"punch_attack_uses"`
+       }))(obj)); false {
+               {
+                       p := &(*(*(struct {
+                               //mt:if _ = %s; false
+                               NonNil bool `json:"-"`
+
+                               AttackCooldown float32 `json:"full_punch_interval"`
+                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                               //mt:len32
+                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                               //mt:len32
+                               DmgGroups []Group `json:"damage_groups"`
+
+                               AttackUses uint16 `json:"punch_attack_uses"`
+                       }))(obj)).NonNil
+                       switch n := read8(r); n {
+                       case 0:
+                               *p = false
+                       case 1:
+                               *p = true
+                       default:
+                               chk(fmt.Errorf("invalid bool: %d", n))
+                       }
+               }
+       }
+       {
+               var n uint16
+               {
+                       p := &n
+                       *p = read16(r)
+               }
+               r := &io.LimitedReader{r, int64(n)}
+               if r.N > 0 {
+                       (*(*(struct {
+                               //mt:if _ = %s; false
+                               NonNil bool `json:"-"`
+
+                               AttackCooldown float32 `json:"full_punch_interval"`
+                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                               //mt:len32
+                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                               //mt:len32
+                               DmgGroups []Group `json:"damage_groups"`
+
+                               AttackUses uint16 `json:"punch_attack_uses"`
+                       }))(obj)).NonNil = true
+               } /**/
+               {
+                       if (*(*(struct {
+                               //mt:if _ = %s; false
+                               NonNil bool `json:"-"`
+
+                               AttackCooldown float32 `json:"full_punch_interval"`
+                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                               //mt:len32
+                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                               //mt:len32
+                               DmgGroups []Group `json:"damage_groups"`
+
+                               AttackUses uint16 `json:"punch_attack_uses"`
+                       }))(obj)).NonNil {
+                               {
+                                       var local379 uint8
+                                       {
+                                               p := &local379
+                                               *p = read8(r)
+                                       }
+                                       if local379 != (5) {
+                                               chk(fmt.Errorf("const %v: %v", 5, local379))
+                                       }
+                               }
+                               {
+                                       p := &(*(*(struct {
+                                               //mt:if _ = %s; false
+                                               NonNil bool `json:"-"`
+
+                                               AttackCooldown float32 `json:"full_punch_interval"`
+                                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                               //mt:len32
+                                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                               //mt:len32
+                                               DmgGroups []Group `json:"damage_groups"`
+
+                                               AttackUses uint16 `json:"punch_attack_uses"`
+                                       }))(obj)).AttackCooldown
+                                       *p = math.Float32frombits(read32(r))
+                               }
+                               {
+                                       p := &(*(*(struct {
+                                               //mt:if _ = %s; false
+                                               NonNil bool `json:"-"`
+
+                                               AttackCooldown float32 `json:"full_punch_interval"`
+                                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                               //mt:len32
+                                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                               //mt:len32
+                                               DmgGroups []Group `json:"damage_groups"`
+
+                                               AttackUses uint16 `json:"punch_attack_uses"`
+                                       }))(obj)).MaxDropLvl
+                                       *p = int16(read16(r))
+                               }
+                               var local380 uint32
+                               {
+                                       p := &local380
+                                       *p = read32(r)
+                               }
+                               ((*(*(struct {
+                                       //mt:if _ = %s; false
+                                       NonNil bool `json:"-"`
+
+                                       AttackCooldown float32 `json:"full_punch_interval"`
+                                       MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                       //mt:len32
+                                       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                       //mt:len32
+                                       DmgGroups []Group `json:"damage_groups"`
+
+                                       AttackUses uint16 `json:"punch_attack_uses"`
+                               }))(obj)).GroupCaps) = make([]ToolGroupCaps, local380)
+                               for local381 := range (*(*(struct {
+                                       //mt:if _ = %s; false
+                                       NonNil bool `json:"-"`
+
+                                       AttackCooldown float32 `json:"full_punch_interval"`
+                                       MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                       //mt:len32
+                                       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                       //mt:len32
+                                       DmgGroups []Group `json:"damage_groups"`
+
+                                       AttackUses uint16 `json:"punch_attack_uses"`
+                               }))(obj)).GroupCaps {
+                                       if err := pcall(func() {
+                                               (((*(*(struct {
+                                                       //mt:if _ = %s; false
+                                                       NonNil bool `json:"-"`
+
+                                                       AttackCooldown float32 `json:"full_punch_interval"`
+                                                       MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                                       //mt:len32
+                                                       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                                       //mt:len32
+                                                       DmgGroups []Group `json:"damage_groups"`
+
+                                                       AttackUses uint16 `json:"punch_attack_uses"`
+                                               }))(obj)).GroupCaps)[local381]).deserialize(r)
+                                       }); err != nil {
+                                               if err == io.EOF {
+                                                       chk(io.EOF)
+                                               }
+                                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.ToolGroupCaps", err))
+                                       }
+                               }
+                               var local382 uint32
+                               {
+                                       p := &local382
+                                       *p = read32(r)
+                               }
+                               ((*(*(struct {
+                                       //mt:if _ = %s; false
+                                       NonNil bool `json:"-"`
+
+                                       AttackCooldown float32 `json:"full_punch_interval"`
+                                       MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                       //mt:len32
+                                       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                       //mt:len32
+                                       DmgGroups []Group `json:"damage_groups"`
+
+                                       AttackUses uint16 `json:"punch_attack_uses"`
+                               }))(obj)).DmgGroups) = make([]Group, local382)
+                               for local383 := range (*(*(struct {
+                                       //mt:if _ = %s; false
+                                       NonNil bool `json:"-"`
+
+                                       AttackCooldown float32 `json:"full_punch_interval"`
+                                       MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                       //mt:len32
+                                       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                       //mt:len32
+                                       DmgGroups []Group `json:"damage_groups"`
+
+                                       AttackUses uint16 `json:"punch_attack_uses"`
+                               }))(obj)).DmgGroups {
+                                       if err := pcall(func() {
+                                               (((*(*(struct {
+                                                       //mt:if _ = %s; false
+                                                       NonNil bool `json:"-"`
+
+                                                       AttackCooldown float32 `json:"full_punch_interval"`
+                                                       MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                                       //mt:len32
+                                                       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                                       //mt:len32
+                                                       DmgGroups []Group `json:"damage_groups"`
+
+                                                       AttackUses uint16 `json:"punch_attack_uses"`
+                                               }))(obj)).DmgGroups)[local383]).deserialize(r)
+                                       }); err != nil {
+                                               if err == io.EOF {
+                                                       chk(io.EOF)
+                                               }
+                                               chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Group", err))
+                                       }
+                               }
+                               {
+                                       p := &(*(*(struct {
+                                               //mt:if _ = %s; false
+                                               NonNil bool `json:"-"`
+
+                                               AttackCooldown float32 `json:"full_punch_interval"`
+                                               MaxDropLvl     int16   `json:"max_drop_level"`
+
+                                               //mt:len32
+                                               GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+                                               //mt:len32
+                                               DmgGroups []Group `json:"damage_groups"`
+
+                                               AttackUses uint16 `json:"punch_attack_uses"`
+                                       }))(obj)).AttackUses
+                                       *p = read16(r)
+                               }
+                       }
+               }
+               if r.N > 0 {
+                       chk(fmt.Errorf("%d bytes of trailing data", r.N))
+               }
+       }
+}
+
+func (obj *AnimType) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *AnimType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *Box) serialize(w io.Writer) {
+       for local384 := range *(*([2]Vec))(obj) {
+               if err := pcall(func() {
+                       ((*(*([2]Vec))(obj))[local384]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+               }
+       }
+}
+
+func (obj *Box) deserialize(r io.Reader) {
+       for local385 := range *(*([2]Vec))(obj) {
+               if err := pcall(func() {
+                       ((*(*([2]Vec))(obj))[local385]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Vec", err))
+               }
+       }
+}
+
+func (obj *TileFlags) serialize(w io.Writer) {
+       {
+               x := *(*(uint16))(obj)
+               write16(w, uint16(x))
+       }
+}
+
+func (obj *TileFlags) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint16))(obj)
+               *p = read16(r)
+       }
+}
+
+func (obj *AlignType) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *AlignType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *NodeBoxType) serialize(w io.Writer) {
+       {
+               x := *(*(uint8))(obj)
+               write8(w, uint8(x))
+       }
+}
+
+func (obj *NodeBoxType) deserialize(r io.Reader) {
+       {
+               p := &*(*(uint8))(obj)
+               *p = read8(r)
+       }
+}
+
+func (obj *DirBoxes) serialize(w io.Writer) {
+       if len(((*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Top)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Top, Bot                 []Box
+                       Front, Left, Back, Right []Box
+               }))(obj)).Top)))
+               write16(w, uint16(x))
+       }
+       for local386 := range (*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Top {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Top, Bot                 []Box
+                               Front, Left, Back, Right []Box
+                       }))(obj)).Top)[local386]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+       if len(((*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Bot)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Top, Bot                 []Box
+                       Front, Left, Back, Right []Box
+               }))(obj)).Bot)))
+               write16(w, uint16(x))
+       }
+       for local387 := range (*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Bot {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Top, Bot                 []Box
+                               Front, Left, Back, Right []Box
+                       }))(obj)).Bot)[local387]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+       if len(((*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Front)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Top, Bot                 []Box
+                       Front, Left, Back, Right []Box
+               }))(obj)).Front)))
+               write16(w, uint16(x))
+       }
+       for local388 := range (*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Front {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Top, Bot                 []Box
+                               Front, Left, Back, Right []Box
+                       }))(obj)).Front)[local388]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+       if len(((*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Left)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Top, Bot                 []Box
+                       Front, Left, Back, Right []Box
+               }))(obj)).Left)))
+               write16(w, uint16(x))
+       }
+       for local389 := range (*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Left {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Top, Bot                 []Box
+                               Front, Left, Back, Right []Box
+                       }))(obj)).Left)[local389]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+       if len(((*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Back)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Top, Bot                 []Box
+                       Front, Left, Back, Right []Box
+               }))(obj)).Back)))
+               write16(w, uint16(x))
+       }
+       for local390 := range (*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Back {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Top, Bot                 []Box
+                               Front, Left, Back, Right []Box
+                       }))(obj)).Back)[local390]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+       if len(((*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Right)) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(((*(*(struct {
+                       Top, Bot                 []Box
+                       Front, Left, Back, Right []Box
+               }))(obj)).Right)))
+               write16(w, uint16(x))
+       }
+       for local391 := range (*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Right {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Top, Bot                 []Box
+                               Front, Left, Back, Right []Box
+                       }))(obj)).Right)[local391]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+}
+
+func (obj *DirBoxes) deserialize(r io.Reader) {
+       var local392 uint16
+       {
+               p := &local392
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Top) = make([]Box, local392)
+       for local393 := range (*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Top {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Top, Bot                 []Box
+                               Front, Left, Back, Right []Box
+                       }))(obj)).Top)[local393]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+       var local394 uint16
+       {
+               p := &local394
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Bot) = make([]Box, local394)
+       for local395 := range (*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Bot {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Top, Bot                 []Box
+                               Front, Left, Back, Right []Box
+                       }))(obj)).Bot)[local395]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+       var local396 uint16
+       {
+               p := &local396
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Front) = make([]Box, local396)
+       for local397 := range (*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Front {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Top, Bot                 []Box
+                               Front, Left, Back, Right []Box
+                       }))(obj)).Front)[local397]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+       var local398 uint16
+       {
+               p := &local398
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Left) = make([]Box, local398)
+       for local399 := range (*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Left {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Top, Bot                 []Box
+                               Front, Left, Back, Right []Box
+                       }))(obj)).Left)[local399]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+       var local400 uint16
+       {
+               p := &local400
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Back) = make([]Box, local400)
+       for local401 := range (*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Back {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Top, Bot                 []Box
+                               Front, Left, Back, Right []Box
+                       }))(obj)).Back)[local401]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+       var local402 uint16
+       {
+               p := &local402
+               *p = read16(r)
+       }
+       ((*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Right) = make([]Box, local402)
+       for local403 := range (*(*(struct {
+               Top, Bot                 []Box
+               Front, Left, Back, Right []Box
+       }))(obj)).Right {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Top, Bot                 []Box
+                               Front, Left, Back, Right []Box
+                       }))(obj)).Right)[local403]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.Box", err))
+               }
+       }
+}
+
+func (obj *ToolGroupCaps) serialize(w io.Writer) {
+       if len(([]byte((*(*(struct {
+               Name   string
+               Uses   int16
+               MaxLvl int16
+
+               //mt:len32
+               Times []DigTime
+       }))(obj)).Name))) > math.MaxUint16 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint16(len(([]byte((*(*(struct {
+                       Name   string
+                       Uses   int16
+                       MaxLvl int16
+
+                       //mt:len32
+                       Times []DigTime
+               }))(obj)).Name))))
+               write16(w, uint16(x))
+       }
+       {
+               _, err := w.Write(([]byte((*(*(struct {
+                       Name   string
+                       Uses   int16
+                       MaxLvl int16
+
+                       //mt:len32
+                       Times []DigTime
+               }))(obj)).Name))[:])
+               chk(err)
+       }
+       {
+               x := (*(*(struct {
+                       Name   string
+                       Uses   int16
+                       MaxLvl int16
+
+                       //mt:len32
+                       Times []DigTime
+               }))(obj)).Uses
+               write16(w, uint16(x))
+       }
+       {
+               x := (*(*(struct {
+                       Name   string
+                       Uses   int16
+                       MaxLvl int16
+
+                       //mt:len32
+                       Times []DigTime
+               }))(obj)).MaxLvl
+               write16(w, uint16(x))
+       }
+       if len(((*(*(struct {
+               Name   string
+               Uses   int16
+               MaxLvl int16
+
+               //mt:len32
+               Times []DigTime
+       }))(obj)).Times)) > math.MaxUint32 {
+               chk(ErrTooLong)
+       }
+       {
+               x := uint32(len(((*(*(struct {
+                       Name   string
+                       Uses   int16
+                       MaxLvl int16
+
+                       //mt:len32
+                       Times []DigTime
+               }))(obj)).Times)))
+               write32(w, uint32(x))
+       }
+       for local404 := range (*(*(struct {
+               Name   string
+               Uses   int16
+               MaxLvl int16
+
+               //mt:len32
+               Times []DigTime
+       }))(obj)).Times {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Name   string
+                               Uses   int16
+                               MaxLvl int16
+
+                               //mt:len32
+                               Times []DigTime
+                       }))(obj)).Times)[local404]).serialize(w)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.DigTime", err))
+               }
+       }
+}
+
+func (obj *ToolGroupCaps) deserialize(r io.Reader) {
+       var local405 []uint8
+       var local406 uint16
+       {
+               p := &local406
+               *p = read16(r)
+       }
+       (local405) = make([]uint8, local406)
+       {
+               _, err := io.ReadFull(r, (local405)[:])
+               chk(err)
+       }
+       ((*(*(struct {
+               Name   string
+               Uses   int16
+               MaxLvl int16
+
+               //mt:len32
+               Times []DigTime
+       }))(obj)).Name) = string(local405)
+       {
+               p := &(*(*(struct {
+                       Name   string
+                       Uses   int16
+                       MaxLvl int16
+
+                       //mt:len32
+                       Times []DigTime
+               }))(obj)).Uses
+               *p = int16(read16(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Name   string
+                       Uses   int16
+                       MaxLvl int16
+
+                       //mt:len32
+                       Times []DigTime
+               }))(obj)).MaxLvl
+               *p = int16(read16(r))
+       }
+       var local407 uint32
+       {
+               p := &local407
+               *p = read32(r)
+       }
+       ((*(*(struct {
+               Name   string
+               Uses   int16
+               MaxLvl int16
+
+               //mt:len32
+               Times []DigTime
+       }))(obj)).Times) = make([]DigTime, local407)
+       for local408 := range (*(*(struct {
+               Name   string
+               Uses   int16
+               MaxLvl int16
+
+               //mt:len32
+               Times []DigTime
+       }))(obj)).Times {
+               if err := pcall(func() {
+                       (((*(*(struct {
+                               Name   string
+                               Uses   int16
+                               MaxLvl int16
+
+                               //mt:len32
+                               Times []DigTime
+                       }))(obj)).Times)[local408]).deserialize(r)
+               }); err != nil {
+                       if err == io.EOF {
+                               chk(io.EOF)
+                       }
+                       chk(fmt.Errorf("%s: %w", "github.com/anon55555/mt.DigTime", err))
+               }
+       }
+}
+
+func (obj *DigTime) serialize(w io.Writer) {
+       {
+               x := (*(*(struct {
+                       Rating int16
+                       Time   float32
+               }))(obj)).Rating
+               write16(w, uint16(x))
+       }
+       {
+               x := (*(*(struct {
+                       Rating int16
+                       Time   float32
+               }))(obj)).Time
+               write32(w, math.Float32bits(x))
+       }
+}
+
+func (obj *DigTime) deserialize(r io.Reader) {
+       {
+               p := &(*(*(struct {
+                       Rating int16
+                       Time   float32
+               }))(obj)).Rating
+               *p = int16(read16(r))
+       }
+       {
+               p := &(*(*(struct {
+                       Rating int16
+                       Time   float32
+               }))(obj)).Time
+               *p = math.Float32frombits(read32(r))
+       }
+}
diff --git a/sound.go b/sound.go
new file mode 100644 (file)
index 0000000..953677c
--- /dev/null
+++ b/sound.go
@@ -0,0 +1,16 @@
+package mt
+
+type SoundID int32
+
+type SoundSrcType uint8
+
+const (
+       NoSrc SoundSrcType = iota
+       PosSrc
+       AOSrc
+)
+
+type SoundDef struct {
+       Name              string
+       Gain, Pitch, Fade float32
+}
index 4e7cc18c57a2d566b7c7a26367a9767c1df84e15..d9306047d94687cb7ecabda8f0dacbb82709d60d 100644 (file)
--- a/stack.go
+++ b/stack.go
@@ -1,5 +1,8 @@
-// In this file, JSON refers to WTF-JSON, a variant of JSON used by Minetest
+// In this file, JSON refers to WTF-JSON.
+//
+// BUG(mt): Itemstrings use variant of JSON called WTF-JSON
 // where \u00XX escapes in string literals act like Go's \xXX escapes.
+// This should not be fixed because it would break existing items.
 
 package mt
 
@@ -22,6 +25,10 @@ type Item struct {
        ItemMeta
 }
 
+// String returns the Stack's itemstring.
+//
+// BUG(mt): The term itemstring is somewhat misleading, because
+// an itemstring represents a stack of items, not a single item.
 func (s Stack) String() string {
        if s.Count == 0 {
                return ""
@@ -83,6 +90,7 @@ func jsonStr(s string) string {
        return b.String()
 }
 
+// Scan scans an itemstring, implementing the fmt.Scanner interface.
 func (stk *Stack) Scan(state fmt.ScanState, verb rune) (err error) {
        *stk = Stack{}
 
diff --git a/texture.go b/texture.go
new file mode 100644 (file)
index 0000000..450cfa1
--- /dev/null
@@ -0,0 +1,3 @@
+package mt
+
+type Texture string
diff --git a/tileanim.go b/tileanim.go
new file mode 100644 (file)
index 0000000..bc6d6dd
--- /dev/null
@@ -0,0 +1,27 @@
+package mt
+
+type AnimType uint8
+
+const (
+       NoAnim AnimType = iota
+       VerticalFrameAnim
+       SpritesheetAnim
+       maxAnim
+)
+
+type TileAnim struct {
+       Type AnimType
+       //mt:assert %s.Type < maxAnim
+
+       //mt:if %s.Type == SpritesheetAnim
+       AspectRatio [2]uint8
+       //mt:end
+
+       //mt:if %s.Type == VerticalFrameAnim
+       NFrames [2]uint16
+       //mt:end
+
+       //mt:if %s.Type != NoAnim
+       Duration float32 // in seconds
+       //mt:end
+}
diff --git a/tiledef.go b/tiledef.go
new file mode 100644 (file)
index 0000000..9a5714d
--- /dev/null
@@ -0,0 +1,40 @@
+package mt
+
+type AlignType uint8
+
+const (
+       NoAlign AlignType = iota
+       WorldAlign
+       UserAlign
+)
+
+type TileFlags uint16
+
+const (
+       TileBackfaceCull TileFlags = 1 << iota
+       TileAbleH
+       TileAbleV
+       TileColor
+       TileScale
+       TileAlign
+)
+
+type TileDef struct {
+       //mt:const uint8(6)
+
+       Texture
+       Anim  TileAnim
+       Flags TileFlags
+
+       //mt:if %s.Flags&TileColor != 0
+       R, G, B uint8
+       //mt:end
+
+       //mt:if %s.Flags&TileScale != 0
+       Scale uint8
+       //mt:end
+
+       //mt:if %s.Flags&TileAlign != 0
+       Align AlignType
+       //mt:end
+}
diff --git a/tocltcmds b/tocltcmds
new file mode 100644 (file)
index 0000000..0dd5e7d
--- /dev/null
+++ b/tocltcmds
@@ -0,0 +1,57 @@
+2      Hello
+3      AcceptAuth
+4      AcceptSudoMode
+5      DenySudoMode
+10     Disco
+32     BlkData
+33     AddNode
+34     RemoveNode
+39     Inv
+41     TimeOfDay
+42     CSMRestrictionFlags
+43     AddPlayerVel
+44     MediaPush
+47     ChatMsg
+49     AORmAdd
+50     AOMsgs
+51     HP
+52     MovePlayer
+53     DiscoLegacy
+54     FOV
+55     DeathScreen
+56     Media
+58     NodeDefs
+60     AnnounceMedia
+61     ItemDefs
+63     PlaySound
+64     StopSound
+65     Privs
+66     InvFormspec
+67     DetachedInv
+68     ShowFormspec
+69     Movement
+70     SpawnParticle
+71     AddParticleSpawner
+73     AddHUD
+74     RmHUD
+75     ChangeHUD
+76     HUDFlags
+77     SetHotbarParam
+78     Breath
+79     SkyParams
+80     OverrideDayNightRatio
+81     LocalPlayerAnim
+82     EyeOffset
+83     DelParticleSpawner
+84     CloudParams
+85     FadeSound
+86     UpdatePlayerList
+87     ModChanMsg
+88     ModChanSig
+89     NodeMetasChanged
+90     SunParams
+91     MoonParams
+92     StarParams
+96     SRPBytesSaltB
+97     FormspecPrepend
+98     MinimapModes
diff --git a/tocltcmds.go b/tocltcmds.go
new file mode 100644 (file)
index 0000000..6af4f09
--- /dev/null
@@ -0,0 +1,766 @@
+//go:generate ./cmdno.sh tocltcmds ToClt toClt uint16 Cmd newToCltCmd
+
+package mt
+
+import (
+       "crypto/sha1"
+       "fmt"
+       "image/color"
+       "io"
+       "math"
+)
+
+type ToCltCmd interface {
+       Cmd
+       toCltCmdNo() uint16
+}
+
+// ToCltHello is sent as a response to ToSrvInit.
+// The client responds to ToCltHello by authenticating.
+type ToCltHello struct {
+       SerializeVer uint8
+       Compression  CompressionModes
+       ProtoVer     uint16
+       AuthMethods
+       Username string
+}
+
+// ToCltAcceptAuth is sent after the client successfully authenticates.
+// The client responds to ToCltAcceptAuth with ToSrvInit2.
+type ToCltAcceptAuth struct {
+       // The client does the equivalent of
+       //      PlayerPos[1] -= 5
+       // before using PlayerPos.
+       PlayerPos Pos
+
+       MapSeed         uint64
+       SendInterval    float32
+       SudoAuthMethods AuthMethods
+}
+
+type ToCltAcceptSudoMode struct{}
+
+type ToCltDenySudoMode struct{}
+
+// ToCltDisco tells that the client that it has been disconnected by the server.
+type ToCltDisco struct {
+       Reason DiscoReason
+       //mt:assert %s.Reason < maxDiscoReason
+
+       //mt:if dr := %s.Reason; dr == Custom || dr == Shutdown || dr == Crash
+       Custom string
+       //mt:end
+
+       //mt:if dr := %s.Reason; dr == Shutdown || dr == Crash
+       Reconnect bool
+       //mt:end
+}
+
+type DiscoReason uint8
+
+const (
+       WrongPasswd DiscoReason = iota
+       UnexpectedData
+       SrvIsSingleplayer
+       UnsupportedVer
+       BadNameChars
+       BadName
+       TooManyClts
+       EmptyPasswd
+       AlreadyConnected
+       SrvErr
+       Custom
+       Shutdown
+       Crash
+       maxDiscoReason
+)
+
+func (cmd ToCltDisco) String() (msg string) {
+       switch cmd.Reason {
+       case WrongPasswd:
+               return "wrong password"
+       case UnexpectedData:
+               return "unexpected data"
+       case SrvIsSingleplayer:
+               return "server is singleplayer"
+       case UnsupportedVer:
+               return "unsupported client version"
+       case BadNameChars:
+               return "disallowed character(s) in player name"
+       case BadName:
+               return "disallowed player name"
+       case TooManyClts:
+               return "too many clients"
+       case EmptyPasswd:
+               return "empty password"
+       case AlreadyConnected:
+               return "another client is already connected with the same name"
+       case SrvErr:
+               return "server error"
+       case Custom:
+               return cmd.Custom
+       case Shutdown:
+               msg = "server shutdown"
+       case Crash:
+               msg = "server crash"
+       default:
+               msg = fmt.Sprintf("DiscoReason(%d)", cmd.Reason)
+       }
+
+       if cmd.Custom != "" {
+               msg += ": " + cmd.Custom
+       }
+
+       return
+}
+
+// ToCltBlkData tells the client the contents of a nearby MapBlk.
+type ToCltBlkData struct {
+       Blkpos [3]int16
+       Blk    MapBlk
+}
+
+// ToCltAddNode tells the client that a nearby node changed
+// to something other than air.
+type ToCltAddNode struct {
+       Pos [3]int16
+       Node
+       KeepMeta bool
+}
+
+// ToCltRemoveNode tells the client that a nearby node changed to air.
+type ToCltRemoveNode struct {
+       Pos [3]int16
+}
+
+// ToCltInv updates the client's inventory.
+type ToCltInv struct {
+       //mt:raw
+       Inv string
+}
+
+// ToCltTimeOfDay updates the client's in-game time of day.
+type ToCltTimeOfDay struct {
+       Time  uint16  // %24000
+       Speed float32 // Speed times faster than real time
+}
+
+// ToCltCSMRestrictionFlags tells the client how use of CSMs should be restricted.
+type ToCltCSMRestrictionFlags struct {
+       Flags CSMRestrictionFlags
+
+       // MapRange is the maximum distance from the player CSMs can read the map
+       // if Flags&LimitMapRange != 0.
+       MapRange uint32
+}
+
+type CSMRestrictionFlags uint64
+
+const (
+       NoCSMs CSMRestrictionFlags = 1 << iota
+       NoChatMsgs
+       NoItemDefs
+       NoNodeDefs
+       LimitMapRange
+       NoPlayerList
+)
+
+// ToCltAddPlayerVel tells the client to add Vel to the player's velocity.
+type ToCltAddPlayerVel struct {
+       Vel Vec
+}
+
+// ToCltMediaPush is sent when a media file is dynamically added.
+type ToCltMediaPush struct {
+       //mt:const uint16(sha1.Size)
+       SHA1        [sha1.Size]byte
+       Filename    string
+       ShouldCache bool
+
+       //mt:len32
+       Data []byte
+}
+
+// ToCltChatMsg tells the client that is has received a chat message.
+type ToCltChatMsg struct {
+       //mt:const uint8(1)
+
+       Type ChatMsgType
+
+       //mt:utf16
+       Sender, Text string
+
+       Timestamp int64 // Unix time.
+}
+
+type ChatMsgType uint8
+
+const (
+       RawMsg ChatMsgType = iota
+       NormalMsg
+       AnnounceMsg
+       SysMsg
+       maxMsg
+)
+
+func (t ChatMsgType) String() string {
+       if t >= maxMsg {
+               return fmt.Sprintf("ChatMsgType(%d)", t)
+       }
+
+       return [...]string{
+               "raw",
+               "normal",
+               "announce",
+               "sys",
+       }[t]
+}
+
+// ToCltAORmAdd tells the client that AOs have been removed from and/or added to
+// the AOs that it can see.
+type ToCltAORmAdd struct {
+       Remove []AOID
+       Add    []struct {
+               ID AOID
+               //mt:const genericCAO
+               //mt:lenhdr 32
+               InitData AOInitData
+               //mt:end
+       }
+}
+
+// ToCltAOMsgs updates the client about nearby AOs.
+type ToCltAOMsgs struct {
+       //mt:raw
+       Msgs []IDAOMsg
+}
+
+// ToCltHP updates the player's HP on the client.
+type ToCltHP struct {
+       HP uint16
+}
+
+// ToCltMovePlayer tells the client that the player has been moved server-side.
+type ToCltMovePlayer struct {
+       Pos
+       Pitch, Yaw float32
+}
+
+type ToCltDiscoLegacy struct {
+       //mt:utf16
+       Reason string
+}
+
+// ToCltFOV tells the client to change its FOV.
+type ToCltFOV struct {
+       FOV            float32
+       Multiplier     bool
+       TransitionTime float32
+}
+
+// ToCltDeathScreen tells the client to show the death screen.
+type ToCltDeathScreen struct {
+       PointCam bool
+       PointAt  Pos
+}
+
+// ToCltMedia responds to a ToSrvMedia packet with the requested media files.
+type ToCltMedia struct {
+       // N is the total number of ToCltMedia packets.
+       // I is the index of this packet.
+       N, I uint16
+
+       //mt:len32
+       Files []struct {
+               Name string
+
+               //mt:len32
+               Data []byte
+       }
+}
+
+// ToCltNodeDefs tells the client the definitions of nodes.
+type ToCltNodeDefs struct {
+       //mt:lenhdr 32
+       //mt:zlib
+
+       // Version.
+       //mt:const uint8(1)
+
+       // See (de)serialize.fmt.
+       Defs []NodeDef
+
+       //mt:end
+       //mt:end
+}
+
+// ToCltAnnounceMedia tells the client what media is available on request.
+// See ToSrvReqMedia.
+type ToCltAnnounceMedia struct {
+       Files []struct {
+               Name       string
+               Base64SHA1 string
+       }
+       URL string
+}
+
+// ToCltItemDefs tells the client the definitions of items.
+type ToCltItemDefs struct {
+       //mt:lenhdr 32
+       //mt:zlib
+
+       //mt:const uint8(0)
+
+       Defs    []ItemDef
+       Aliases []struct{ Alias, Orig string }
+
+       //mt:end
+       //mt:end
+}
+
+// ToCltPlaySound tells the client to play a sound.
+type ToCltPlaySound struct {
+       ID      SoundID
+       Name    string
+       Gain    float32
+       SrcType SoundSrcType
+       Pos
+       SrcAOID   AOID
+       Loop      bool
+       Fade      float32
+       Pitch     float32
+       Ephemeral bool
+}
+
+// ToCltStopSound tells the client to stop playing a sound.
+type ToCltStopSound struct {
+       ID SoundID
+}
+
+// ToCltPrivs tells the client its privs.
+type ToCltPrivs struct {
+       Privs []string
+}
+
+// ToCltInvFormspec tells the client its inventory formspec.
+type ToCltInvFormspec struct {
+       //mt:len32
+       Formspec string
+}
+
+// ToCltDetachedInv updates a detached inventory on the client.
+type ToCltDetachedInv struct {
+       Name string
+       Keep bool
+       Len  uint16 // deprecated
+
+       //mt:raw
+       Inv string
+}
+
+// ToCltShowFormspec tells the client to show a formspec.
+type ToCltShowFormspec struct {
+       //mt:len32
+       Formspec string
+
+       Formname string
+}
+
+// ToCltMovement tells the client how to move.
+type ToCltMovement struct {
+       DefaultAccel, AirAccel, FastAccel,
+       WalkSpeed, CrouchSpeed, FastSpeed, ClimbSpeed, JumpSpeed,
+       Fluidity, Smoothing, Sink, // liquids
+       Gravity float32
+}
+
+// ToCltSpawnParticle tells the client to spawn a particle.
+type ToCltSpawnParticle struct {
+       Pos, Vel, Acc  [3]float32
+       ExpirationTime float32 // in seconds.
+       Size           float32
+       Collide        bool
+
+       //mt:len32
+       Texture
+
+       Vertical    bool
+       CollisionRm bool
+       AnimParams  TileAnim
+       Glow        uint8
+       AOCollision bool
+       NodeParam0  Content
+       NodeParam2  uint8
+       NodeTile    uint8
+}
+
+type ParticleSpawnerID uint32
+
+// ToCltAddParticleSpawner tells the client to add a particle spawner.
+type ToCltAddParticleSpawner struct {
+       Amount         uint16
+       Duration       float32
+       Pos, Vel, Acc  [2][3]float32
+       ExpirationTime [2]float32 // in seconds.
+       Size           [2]float32
+       Collide        bool
+
+       //mt:len32
+       Texture
+
+       ID           ParticleSpawnerID
+       Vertical     bool
+       CollisionRm  bool
+       AttachedAOID AOID
+       AnimParams   TileAnim
+       Glow         uint8
+       AOCollision  bool
+       NodeParam0   Content
+       NodeParam2   uint8
+       NodeTile     uint8
+}
+
+type HUDID uint32
+
+// ToCltHUDAdd tells the client to add a HUD.
+type ToCltAddHUD struct {
+       ID HUDID
+
+       Type HUDType
+
+       Pos      [2]float32
+       Name     string
+       Scale    [2]float32
+       Text     string
+       Number   uint32
+       Item     uint32
+       Dir      uint32
+       Align    [2]float32
+       Offset   [2]float32
+       WorldPos Pos
+       Size     [2]int32
+       ZIndex   int16
+       Text2    string
+}
+
+type HUDType uint8
+
+const (
+       ImgHUD HUDType = iota
+       TextHUD
+       StatbarHUD
+       InvHUD
+       WaypointHUD
+       ImgWaypointHUD
+)
+
+// ToCltRmHUD tells the client to remove a HUD.
+type ToCltRmHUD struct {
+       ID HUDID
+}
+
+// ToCltChangeHUD tells the client to change a field in a HUD.
+type ToCltChangeHUD struct {
+       ID HUDID
+
+       Field HUDField
+
+       //mt:assert %s.Field < hudMax
+
+       //mt:if %s.Field == HUDPos
+       Pos [2]float32
+       //mt:end
+
+       //mt:if %s.Field == HUDName
+       Name string
+       //mt:end
+
+       //mt:if %s.Field == HUDScale
+       Scale [2]float32
+       //mt:end
+
+       //mt:if %s.Field == HUDText
+       Text string
+       //mt:end
+
+       //mt:if %s.Field == HUDNumber
+       Number uint32
+       //mt:end
+
+       //mt:if %s.Field == HUDItem
+       Item uint32
+       //mt:end
+
+       //mt:if %s.Field == HUDDir
+       Dir uint32
+       //mt:end
+
+       //mt:if %s.Field == HUDAlign
+       Align [2]float32
+       //mt:end
+
+       //mt:if %s.Field == HUDOffset
+       Offset [2]float32
+       //mt:end
+
+       //mt:if %s.Field == HUDWorldPos
+       WorldPos Pos
+       //mt:end
+
+       //mt:if %s.Field == HUDSize
+       Size [2]int32
+       //mt:end
+
+       //mt:if %s.Field == HUDZIndex
+       ZIndex uint32
+       //mt:end
+
+       //mt:if %s.Field == HUDText2
+       Text2 string
+       //mt:end
+}
+
+type HUDField uint8
+
+const (
+       HUDPos HUDField = iota
+       HUDName
+       HUDScale
+       HUDText
+       HUDNumber
+       HUDItem
+       HUDDir
+       HUDAlign
+       HUDOffset
+       HUDWorldPos
+       HUDSize
+       HUDZIndex
+       HUDText2
+       hudMax
+)
+
+// ToCltHUDFlags tells the client to update its HUD flags.
+type ToCltHUDFlags struct {
+       // &^= Mask
+       // |= Flags
+       Flags, Mask HUDFlags
+}
+
+type HUDFlags uint32
+
+const (
+       ShowHotbar HUDFlags = 1 << iota
+       ShowHealthBar
+       ShowCrosshair
+       ShowWieldedItem
+       ShowBreathBar
+       ShowMinimap
+       ShowRadarMinimap
+)
+
+// ToCltSetHotbarParam tells the client to set a hotbar parameter.
+type ToCltSetHotbarParam struct {
+       Param HotbarParam
+
+       //mt:if %s.Param == HotbarSize
+       //mt:const uint16(4) // Size of Size field.
+       Size int32
+       //mt:end
+
+       //mt:if %s.Param != HotbarSize
+       Img Texture
+       //mt:end
+}
+
+type HotbarParam uint16
+
+const (
+       HotbarSize HotbarParam = 1 + iota
+       HotbarImg
+       HotbarSelImg
+)
+
+// ToCltBreath tells the client how much breath it has.
+type ToCltBreath struct {
+       Breath uint16
+}
+
+// ToCltSkyParams tells the client how to render the sky.
+type ToCltSkyParams struct {
+       BgColor     color.NRGBA
+       Type        string
+       Clouds      bool
+       SunFogTint  color.NRGBA
+       MoonFogTint color.NRGBA
+       FogTintType string
+
+       //mt:if %s.Type == "skybox"
+       Textures []Texture
+       //mt:end
+
+       //mt:if %s.Type == "regular"
+       DaySky, DayHorizon,
+       DawnSky, DawnHorizon,
+       NightSky, NightHorizon,
+       Indoor color.NRGBA
+       //mt:end
+}
+
+// ToCltOverrideDayNightRatio overrides the client's day-night ratio
+type ToCltOverrideDayNightRatio struct {
+       Override bool
+       Ratio    uint16
+}
+
+// ToCltLocalPlayerAnim tells the client how to animate the player.
+type ToCltLocalPlayerAnim struct {
+       Idle, Walk, Dig, WalkDig [2]int32
+       Speed                    float32
+}
+
+// ToCltEyeOffset tells the client where to position the camera
+// relative to the player.
+type ToCltEyeOffset struct {
+       First, Third Vec
+}
+
+// ToCltDelParticleSpawner tells the client to delete a particle spawner.
+type ToCltDelParticleSpawner struct {
+       ID ParticleSpawnerID
+}
+
+// ToCltCloudParams tells the client how to render the clouds.
+type ToCltCloudParams struct {
+       Density      float32
+       DiffuseColor color.NRGBA
+       AmbientColor color.NRGBA
+       Height       float32
+       Thickness    float32
+       Speed        [2]float32
+}
+
+// ToCltFadeSound tells the client to fade a sound.
+type ToCltFadeSound struct {
+       ID   SoundID
+       Step float32
+       Gain float32
+}
+
+// ToCltUpdatePlayerList informs the client of players leaving or joining.
+type ToCltUpdatePlayerList struct {
+       Type    PlayerListUpdateType
+       Players []string
+}
+
+type PlayerListUpdateType uint8
+
+const (
+       InitPlayers PlayerListUpdateType = iota
+       AddPlayers
+       RemovePlayers
+)
+
+// ToCltModChanMsg tells the client it has been sent a message on a mod channel.
+type ToCltModChanMsg struct {
+       Channel string
+       Sender  string
+       Msg     string
+}
+
+// ToCltModChanMsg tells the client it has received a signal on a mod channel.
+type ToCltModChanSig struct {
+       Signal  ModChanSig
+       Channel string
+}
+
+type ModChanSig uint8
+
+const (
+       JoinOK ModChanSig = iota
+       JoinFail
+       LeaveOK
+       LeaveFail
+       NotRegistered
+       SetState
+)
+
+// ToCltModChanMsg is sent when node metadata near the client changes.
+type ToCltNodeMetasChanged struct {
+       //mt:lenhdr 32
+       Changed map[[3]int16]*NodeMeta
+       //mt:end
+}
+
+// ToCltSunParams tells the client how to render the sun.
+type ToCltSunParams struct {
+       Visible bool
+       Texture
+       ToneMap Texture
+       Rise    Texture
+       Rising  bool
+       Size    float32
+}
+
+// ToCltMoonParams tells the client how to render the moon.
+type ToCltMoonParams struct {
+       Visible bool
+       Texture
+       ToneMap Texture
+       Size    float32
+}
+
+// ToCltStarParams tells the client how to render the stars.
+type ToCltStarParams struct {
+       Visible bool
+       Count   uint32
+       Color   color.NRGBA
+       Size    float32
+}
+
+type ToCltSRPBytesSaltB struct {
+       Salt, B []byte
+}
+
+// ToCltFormspecPrepend tells the client to prepend a string to all formspecs.
+type ToCltFormspecPrepend struct {
+       Prepend string
+}
+
+// ToCltMinimapModes tells the client the set of available minimap modes.
+type ToCltMinimapModes struct {
+       Current uint16
+       Modes   []MinimapMode
+}
+
+func (cmd *ToCltMinimapModes) serialize(w io.Writer) error {
+       buf := make([]byte, 4)
+       if len(cmd.Modes) > math.MaxUint16 {
+               return ErrTooLong
+       }
+       be.PutUint16(buf[0:2], uint16(len(cmd.Modes)))
+       be.PutUint16(buf[2:4], cmd.Current)
+       if _, err := w.Write(buf); err != nil {
+               return err
+       }
+       for i := range cmd.Modes {
+               if err := serialize(w, &cmd.Modes[i]); err != nil {
+                       return err
+               }
+       }
+       return nil
+}
+
+func (cmd *ToCltMinimapModes) deserialize(r io.Reader) error {
+       buf := make([]byte, 4)
+       if _, err := io.ReadFull(r, buf); err != nil {
+               return err
+       }
+       cmd.Modes = make([]MinimapMode, be.Uint16(buf[0:2]))
+       cmd.Current = be.Uint16(buf[2:4])
+       for i := range cmd.Modes {
+               if err := deserialize(r, &cmd.Modes[i]); err != nil {
+                       return err
+               }
+       }
+       return nil
+}
diff --git a/tocltcmds_cmdno.go b/tocltcmds_cmdno.go
new file mode 100644 (file)
index 0000000..8999717
--- /dev/null
@@ -0,0 +1,121 @@
+// Code generated by cmdno.sh. DO NOT EDIT.
+
+package mt
+
+func (*ToCltHello) toCltCmdNo() uint16                 { return 2 }
+func (*ToCltAcceptAuth) toCltCmdNo() uint16            { return 3 }
+func (*ToCltAcceptSudoMode) toCltCmdNo() uint16        { return 4 }
+func (*ToCltDenySudoMode) toCltCmdNo() uint16          { return 5 }
+func (*ToCltDisco) toCltCmdNo() uint16                 { return 10 }
+func (*ToCltBlkData) toCltCmdNo() uint16               { return 32 }
+func (*ToCltAddNode) toCltCmdNo() uint16               { return 33 }
+func (*ToCltRemoveNode) toCltCmdNo() uint16            { return 34 }
+func (*ToCltInv) toCltCmdNo() uint16                   { return 39 }
+func (*ToCltTimeOfDay) toCltCmdNo() uint16             { return 41 }
+func (*ToCltCSMRestrictionFlags) toCltCmdNo() uint16   { return 42 }
+func (*ToCltAddPlayerVel) toCltCmdNo() uint16          { return 43 }
+func (*ToCltMediaPush) toCltCmdNo() uint16             { return 44 }
+func (*ToCltChatMsg) toCltCmdNo() uint16               { return 47 }
+func (*ToCltAORmAdd) toCltCmdNo() uint16               { return 49 }
+func (*ToCltAOMsgs) toCltCmdNo() uint16                { return 50 }
+func (*ToCltHP) toCltCmdNo() uint16                    { return 51 }
+func (*ToCltMovePlayer) toCltCmdNo() uint16            { return 52 }
+func (*ToCltDiscoLegacy) toCltCmdNo() uint16           { return 53 }
+func (*ToCltFOV) toCltCmdNo() uint16                   { return 54 }
+func (*ToCltDeathScreen) toCltCmdNo() uint16           { return 55 }
+func (*ToCltMedia) toCltCmdNo() uint16                 { return 56 }
+func (*ToCltNodeDefs) toCltCmdNo() uint16              { return 58 }
+func (*ToCltAnnounceMedia) toCltCmdNo() uint16         { return 60 }
+func (*ToCltItemDefs) toCltCmdNo() uint16              { return 61 }
+func (*ToCltPlaySound) toCltCmdNo() uint16             { return 63 }
+func (*ToCltStopSound) toCltCmdNo() uint16             { return 64 }
+func (*ToCltPrivs) toCltCmdNo() uint16                 { return 65 }
+func (*ToCltInvFormspec) toCltCmdNo() uint16           { return 66 }
+func (*ToCltDetachedInv) toCltCmdNo() uint16           { return 67 }
+func (*ToCltShowFormspec) toCltCmdNo() uint16          { return 68 }
+func (*ToCltMovement) toCltCmdNo() uint16              { return 69 }
+func (*ToCltSpawnParticle) toCltCmdNo() uint16         { return 70 }
+func (*ToCltAddParticleSpawner) toCltCmdNo() uint16    { return 71 }
+func (*ToCltAddHUD) toCltCmdNo() uint16                { return 73 }
+func (*ToCltRmHUD) toCltCmdNo() uint16                 { return 74 }
+func (*ToCltChangeHUD) toCltCmdNo() uint16             { return 75 }
+func (*ToCltHUDFlags) toCltCmdNo() uint16              { return 76 }
+func (*ToCltSetHotbarParam) toCltCmdNo() uint16        { return 77 }
+func (*ToCltBreath) toCltCmdNo() uint16                { return 78 }
+func (*ToCltSkyParams) toCltCmdNo() uint16             { return 79 }
+func (*ToCltOverrideDayNightRatio) toCltCmdNo() uint16 { return 80 }
+func (*ToCltLocalPlayerAnim) toCltCmdNo() uint16       { return 81 }
+func (*ToCltEyeOffset) toCltCmdNo() uint16             { return 82 }
+func (*ToCltDelParticleSpawner) toCltCmdNo() uint16    { return 83 }
+func (*ToCltCloudParams) toCltCmdNo() uint16           { return 84 }
+func (*ToCltFadeSound) toCltCmdNo() uint16             { return 85 }
+func (*ToCltUpdatePlayerList) toCltCmdNo() uint16      { return 86 }
+func (*ToCltModChanMsg) toCltCmdNo() uint16            { return 87 }
+func (*ToCltModChanSig) toCltCmdNo() uint16            { return 88 }
+func (*ToCltNodeMetasChanged) toCltCmdNo() uint16      { return 89 }
+func (*ToCltSunParams) toCltCmdNo() uint16             { return 90 }
+func (*ToCltMoonParams) toCltCmdNo() uint16            { return 91 }
+func (*ToCltStarParams) toCltCmdNo() uint16            { return 92 }
+func (*ToCltSRPBytesSaltB) toCltCmdNo() uint16         { return 96 }
+func (*ToCltFormspecPrepend) toCltCmdNo() uint16       { return 97 }
+func (*ToCltMinimapModes) toCltCmdNo() uint16          { return 98 }
+
+var newToCltCmd = map[uint16]func() Cmd{
+       2:  func() Cmd { return new(ToCltHello) },
+       3:  func() Cmd { return new(ToCltAcceptAuth) },
+       4:  func() Cmd { return new(ToCltAcceptSudoMode) },
+       5:  func() Cmd { return new(ToCltDenySudoMode) },
+       10: func() Cmd { return new(ToCltDisco) },
+       32: func() Cmd { return new(ToCltBlkData) },
+       33: func() Cmd { return new(ToCltAddNode) },
+       34: func() Cmd { return new(ToCltRemoveNode) },
+       39: func() Cmd { return new(ToCltInv) },
+       41: func() Cmd { return new(ToCltTimeOfDay) },
+       42: func() Cmd { return new(ToCltCSMRestrictionFlags) },
+       43: func() Cmd { return new(ToCltAddPlayerVel) },
+       44: func() Cmd { return new(ToCltMediaPush) },
+       47: func() Cmd { return new(ToCltChatMsg) },
+       49: func() Cmd { return new(ToCltAORmAdd) },
+       50: func() Cmd { return new(ToCltAOMsgs) },
+       51: func() Cmd { return new(ToCltHP) },
+       52: func() Cmd { return new(ToCltMovePlayer) },
+       53: func() Cmd { return new(ToCltDiscoLegacy) },
+       54: func() Cmd { return new(ToCltFOV) },
+       55: func() Cmd { return new(ToCltDeathScreen) },
+       56: func() Cmd { return new(ToCltMedia) },
+       58: func() Cmd { return new(ToCltNodeDefs) },
+       60: func() Cmd { return new(ToCltAnnounceMedia) },
+       61: func() Cmd { return new(ToCltItemDefs) },
+       63: func() Cmd { return new(ToCltPlaySound) },
+       64: func() Cmd { return new(ToCltStopSound) },
+       65: func() Cmd { return new(ToCltPrivs) },
+       66: func() Cmd { return new(ToCltInvFormspec) },
+       67: func() Cmd { return new(ToCltDetachedInv) },
+       68: func() Cmd { return new(ToCltShowFormspec) },
+       69: func() Cmd { return new(ToCltMovement) },
+       70: func() Cmd { return new(ToCltSpawnParticle) },
+       71: func() Cmd { return new(ToCltAddParticleSpawner) },
+       73: func() Cmd { return new(ToCltAddHUD) },
+       74: func() Cmd { return new(ToCltRmHUD) },
+       75: func() Cmd { return new(ToCltChangeHUD) },
+       76: func() Cmd { return new(ToCltHUDFlags) },
+       77: func() Cmd { return new(ToCltSetHotbarParam) },
+       78: func() Cmd { return new(ToCltBreath) },
+       79: func() Cmd { return new(ToCltSkyParams) },
+       80: func() Cmd { return new(ToCltOverrideDayNightRatio) },
+       81: func() Cmd { return new(ToCltLocalPlayerAnim) },
+       82: func() Cmd { return new(ToCltEyeOffset) },
+       83: func() Cmd { return new(ToCltDelParticleSpawner) },
+       84: func() Cmd { return new(ToCltCloudParams) },
+       85: func() Cmd { return new(ToCltFadeSound) },
+       86: func() Cmd { return new(ToCltUpdatePlayerList) },
+       87: func() Cmd { return new(ToCltModChanMsg) },
+       88: func() Cmd { return new(ToCltModChanSig) },
+       89: func() Cmd { return new(ToCltNodeMetasChanged) },
+       90: func() Cmd { return new(ToCltSunParams) },
+       91: func() Cmd { return new(ToCltMoonParams) },
+       92: func() Cmd { return new(ToCltStarParams) },
+       96: func() Cmd { return new(ToCltSRPBytesSaltB) },
+       97: func() Cmd { return new(ToCltFormspecPrepend) },
+       98: func() Cmd { return new(ToCltMinimapModes) },
+}
diff --git a/toolcaps.go b/toolcaps.go
new file mode 100644 (file)
index 0000000..c414607
--- /dev/null
@@ -0,0 +1,45 @@
+package mt
+
+type ToolCaps struct {
+       //mt:if _ = %s; false
+       NonNil bool `json:"-"`
+       //mt:end
+
+       //mt:lenhdr 16
+
+       //mt:ifde
+       //mt:if r.N > 0 { %s.NonNil = true}; /**/
+       //mt:if %s.NonNil
+
+       //mt:const uint8(5)
+
+       AttackCooldown float32 `json:"full_punch_interval"`
+       MaxDropLvl     int16   `json:"max_drop_level"`
+
+       //mt:len32
+       GroupCaps []ToolGroupCaps `json:"groupcaps"`
+
+       //mt:len32
+       DmgGroups []Group `json:"damage_groups"`
+
+       AttackUses uint16 `json:"punch_attack_uses"`
+
+       //mt:end
+       //mt:end
+
+       //mt:end
+}
+
+type ToolGroupCaps struct {
+       Name   string
+       Uses   int16
+       MaxLvl int16
+
+       //mt:len32
+       Times []DigTime
+}
+
+type DigTime struct {
+       Rating int16
+       Time   float32
+}
diff --git a/tosrvcmds b/tosrvcmds
new file mode 100644 (file)
index 0000000..08d880f
--- /dev/null
+++ b/tosrvcmds
@@ -0,0 +1,23 @@
+0      Nil
+2      Init
+17     Init2
+23     ModChanJoin
+24     ModChanLeave
+25     ModChanMsg
+35     PlayerPos
+36     GotBlks
+37     DeletedBlks
+49     InvAction
+50     ChatMsg
+53     FallDmg
+55     SelectItem
+56     Respawn
+57     Interact
+58     RemovedSounds
+59     NodeMetaFields
+60     InvFields
+64     ReqMedia
+67     CltReady
+80     FirstSRP
+81     SRPBytesA
+82     SRPBytesM
diff --git a/tosrvcmds.go b/tosrvcmds.go
new file mode 100644 (file)
index 0000000..4f60600
--- /dev/null
@@ -0,0 +1,155 @@
+//go:generate ./cmdno.sh tosrvcmds ToSrv toSrv uint16 Cmd newToSrvCmd
+
+package mt
+
+type ToSrvCmd interface {
+       Cmd
+       toSrvCmdNo() uint16
+}
+
+// ToSrvNil is the first packet sent in a connection.
+type ToSrvNil struct{}
+
+// ToSrvInit is sent as unreliable after ToSrvNil and is re-sent repeatedly
+// until either the server replies with ToCltHello or 10 seconds pass and
+// the connection times out.
+type ToSrvInit struct {
+       SerializeVer             uint8
+       SupportedCompression     CompressionModes
+       MinProtoVer, MaxProtoVer uint16
+       PlayerName               string
+
+       //mt:opt
+       SendFullItemMeta bool
+}
+
+// ToSrvInit2 is sent after ToCltAcceptAuth is received.
+// The server responds to ToSrvInit2 by sending ToCltItemDefs, ToCltNodeDefs,
+// ToCltAnnounceMedia, ToCltMovement and ToCltCSMRestrictionFlags.
+type ToSrvInit2 struct {
+       Lang string
+}
+
+// ToSrvModChanJoin attempts to join a mod channel.
+type ToSrvModChanJoin struct {
+       Channel string
+}
+
+// ToSrvModChanJoin attempts to leave a mod channel.
+type ToSrvModChanLeave struct {
+       Channel string
+}
+
+// ToSrvModChanJoin sends a message on a mod channel.
+type ToSrvModChanMsg struct {
+       Channel string
+       Msg     string
+}
+
+// ToSrvPlayerPos tells the server that the client's PlayerPos has changed.
+type ToSrvPlayerPos struct {
+       Pos PlayerPos
+}
+
+// ToSrvGotBlks tells the server that the client has received Blks.
+type ToSrvGotBlks struct {
+       //mt:len8
+       Blks [][3]int16
+}
+
+// ToSrvDeletedBlks tells the server that the client has deleted Blks.
+type ToSrvDeletedBlks struct {
+       //mt:len8
+       Blks [][3]int16
+}
+
+// ToSrvInvAction tells the server that the client has performed an inventory action.
+type ToSrvInvAction struct {
+       //mt:raw
+       Action string
+}
+
+// ToSrvChatMsg tells the server that the client has sent a chat message.
+type ToSrvChatMsg struct {
+       //mt:utf16
+       Msg string
+}
+
+// ToSrvFallDmg tells the server that the client has taken fall damage.
+type ToSrvFallDmg struct {
+       Amount uint16
+}
+
+// ToSrvSelectItem tells the server the selected item in the client's hotbar.
+type ToSrvSelectItem struct {
+       Slot uint16
+}
+
+// ToSrvRespawn tells the server that the player has respawned.
+type ToSrvRespawn struct{}
+
+// ToSrvInteract tells the server that a node or AO has been interacted with.
+type ToSrvInteract struct {
+       Action   Interaction
+       ItemSlot uint16
+       //mt:lenhdr 32
+       Pointed PointedThing
+       //mt:end
+       Pos PlayerPos
+}
+
+type Interaction uint8
+
+const (
+       Dig Interaction = iota
+       StopDigging
+       Dug
+       Place
+       Use      // Left click snowball-like.
+       Activate // Right click air.
+)
+
+// ToSrvRemovedSounds tells the server that the client has finished playing
+// the sounds with the given IDs.
+type ToSrvRemovedSounds struct {
+       IDs []SoundID
+}
+
+type ToSrvNodeMetaFields struct {
+       Pos      [3]int16
+       Formname string
+       Fields   []Field
+}
+
+type ToSrvInvFields struct {
+       Formname string
+       Fields   []Field
+}
+
+// ToSrvReqMedia requests media files from the server.
+type ToSrvReqMedia struct {
+       Filenames []string
+}
+
+type ToSrvCltReady struct {
+       // Version information.
+       Major, Minor, Patch uint8
+       Reserved            uint8
+       Version             string
+       Formspec            uint16
+}
+
+type ToSrvFirstSRP struct {
+       Salt        []byte
+       Verifier    []byte
+       EmptyPasswd bool
+}
+
+type ToSrvSRPBytesA struct {
+       A      []byte
+       NoSHA1 bool
+}
+
+type ToSrvSRPBytesM struct {
+       M []byte
+}
diff --git a/tosrvcmds_cmdno.go b/tosrvcmds_cmdno.go
new file mode 100644 (file)
index 0000000..04e6530
--- /dev/null
@@ -0,0 +1,53 @@
+// Code generated by cmdno.sh. DO NOT EDIT.
+
+package mt
+
+func (*ToSrvNil) toSrvCmdNo() uint16            { return 0 }
+func (*ToSrvInit) toSrvCmdNo() uint16           { return 2 }
+func (*ToSrvInit2) toSrvCmdNo() uint16          { return 17 }
+func (*ToSrvModChanJoin) toSrvCmdNo() uint16    { return 23 }
+func (*ToSrvModChanLeave) toSrvCmdNo() uint16   { return 24 }
+func (*ToSrvModChanMsg) toSrvCmdNo() uint16     { return 25 }
+func (*ToSrvPlayerPos) toSrvCmdNo() uint16      { return 35 }
+func (*ToSrvGotBlks) toSrvCmdNo() uint16        { return 36 }
+func (*ToSrvDeletedBlks) toSrvCmdNo() uint16    { return 37 }
+func (*ToSrvInvAction) toSrvCmdNo() uint16      { return 49 }
+func (*ToSrvChatMsg) toSrvCmdNo() uint16        { return 50 }
+func (*ToSrvFallDmg) toSrvCmdNo() uint16        { return 53 }
+func (*ToSrvSelectItem) toSrvCmdNo() uint16     { return 55 }
+func (*ToSrvRespawn) toSrvCmdNo() uint16        { return 56 }
+func (*ToSrvInteract) toSrvCmdNo() uint16       { return 57 }
+func (*ToSrvRemovedSounds) toSrvCmdNo() uint16  { return 58 }
+func (*ToSrvNodeMetaFields) toSrvCmdNo() uint16 { return 59 }
+func (*ToSrvInvFields) toSrvCmdNo() uint16      { return 60 }
+func (*ToSrvReqMedia) toSrvCmdNo() uint16       { return 64 }
+func (*ToSrvCltReady) toSrvCmdNo() uint16       { return 67 }
+func (*ToSrvFirstSRP) toSrvCmdNo() uint16       { return 80 }
+func (*ToSrvSRPBytesA) toSrvCmdNo() uint16      { return 81 }
+func (*ToSrvSRPBytesM) toSrvCmdNo() uint16      { return 82 }
+
+var newToSrvCmd = map[uint16]func() Cmd{
+       0:  func() Cmd { return new(ToSrvNil) },
+       2:  func() Cmd { return new(ToSrvInit) },
+       17: func() Cmd { return new(ToSrvInit2) },
+       23: func() Cmd { return new(ToSrvModChanJoin) },
+       24: func() Cmd { return new(ToSrvModChanLeave) },
+       25: func() Cmd { return new(ToSrvModChanMsg) },
+       35: func() Cmd { return new(ToSrvPlayerPos) },
+       36: func() Cmd { return new(ToSrvGotBlks) },
+       37: func() Cmd { return new(ToSrvDeletedBlks) },
+       49: func() Cmd { return new(ToSrvInvAction) },
+       50: func() Cmd { return new(ToSrvChatMsg) },
+       53: func() Cmd { return new(ToSrvFallDmg) },
+       55: func() Cmd { return new(ToSrvSelectItem) },
+       56: func() Cmd { return new(ToSrvRespawn) },
+       57: func() Cmd { return new(ToSrvInteract) },
+       58: func() Cmd { return new(ToSrvRemovedSounds) },
+       59: func() Cmd { return new(ToSrvNodeMetaFields) },
+       60: func() Cmd { return new(ToSrvInvFields) },
+       64: func() Cmd { return new(ToSrvReqMedia) },
+       67: func() Cmd { return new(ToSrvCltReady) },
+       80: func() Cmd { return new(ToSrvFirstSRP) },
+       81: func() Cmd { return new(ToSrvSRPBytesA) },
+       82: func() Cmd { return new(ToSrvSRPBytesM) },
+}
diff --git a/vec.go b/vec.go
new file mode 100644 (file)
index 0000000..08422c6
--- /dev/null
+++ b/vec.go
@@ -0,0 +1,20 @@
+package mt
+
+// A Vec is a 3D vector in units of 0.1 nodes.
+type Vec [3]float32
+
+// Add returns v+w.
+func (v Vec) Add(w Vec) Vec {
+       for i := range v {
+               v[i] += w[i]
+       }
+       return v
+}
+
+// Sub returns v-w.
+func (v Vec) Sub(w Vec) Vec {
+       for i := range v {
+               v[i] -= w[i]
+       }
+       return v
+}
diff --git a/zerialize.go b/zerialize.go
new file mode 100644 (file)
index 0000000..0e07bec
--- /dev/null
@@ -0,0 +1,56 @@
+// This file is called zerialize.go so the following go:generate runs last.
+
+//go:generate ./mkserialize.sh
+
+package mt
+
+import (
+       "encoding/binary"
+       "errors"
+       "io"
+)
+
+// ErrTooLong reports a length that is too long to serialize.
+var ErrTooLong = errors.New("len too long")
+
+var be = binary.BigEndian
+
+type serializer interface {
+       serialize(w io.Writer)
+}
+
+func serialize(w io.Writer, s interface{}) error {
+       return pcall(func() { s.(serializer).serialize(w) })
+}
+
+type deserializer interface {
+       deserialize(r io.Reader)
+}
+
+func deserialize(r io.Reader, d interface{}) error {
+       return pcall(func() { d.(deserializer).deserialize(r) })
+}
+
+type serializationError struct {
+       error
+}
+
+func pcall(f func()) (rerr error) {
+       defer func() {
+               switch r := recover().(type) {
+               case serializationError:
+                       rerr = r.error
+               case nil:
+               default:
+                       panic(r)
+               }
+       }()
+       f()
+       return
+}
+
+func chk(err error) {
+       if err != nil {
+               panic(serializationError{err})
+       }
+}