#ddnet #teeworlds #snapshot #serialization #format #mod #arrayvec

bin+lib twsnap

Common snapshot format between TwGpu and TwGame

13 releases (6 breaking)

new 0.7.1 Nov 23, 2024
0.6.3 Nov 17, 2024
0.1.1 Jun 5, 2024

#4 in #teeworlds

Download history 108/week @ 2024-08-10 23/week @ 2024-08-17 177/week @ 2024-08-24 8/week @ 2024-08-31 21/week @ 2024-09-14 26/week @ 2024-09-21 47/week @ 2024-09-28 16/week @ 2024-10-05 31/week @ 2024-10-12 13/week @ 2024-10-19 14/week @ 2024-10-26 416/week @ 2024-11-02 142/week @ 2024-11-09 350/week @ 2024-11-16

922 downloads per month
Used in 7 crates (4 directly)

AGPL-3.0-only

85KB
2.5K SLoC

Snapshot reprentation

Goals:

  • Can be used to render

  • Can be produced by game implementation

  • Can be serialized into DDNet demo

  • Can be deserialized from DDNet demo

  • Can be used as input from game implementation

  • valid utf-8

  • no allocations

  • usability first

Goals, if it doesn't affect the representation, otherwise another snapshot is necessary

  • Can be deserialized from Teehistorian

Non-goals:

  • repr(C) to serialize
  • Implement functions on snap objects like trajectory.
  • no_std
  • Serialization can be played by old DDNet clients or Teeworlds Client
  • resemblance of [i32; k] strings by Teeworlds
  • writing non-DDNet snapshots (other mods)

Architecture:

  • Using fixed to represent uniform scales for all distance related variables: 1 per tile
  • vek for points
  • arrayvec for stack strings/arrays
  • rust enum for protocol enums
  • bitflags
  • bools
  • One snapshot per team

Dependencies

~7.5MB
~140K SLoC