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

bin+lib twsnap

Common snapshot format between TwGpu and TwGame

4 releases

0.2.1 Aug 24, 2024
0.2.0 Aug 14, 2024
0.1.1 Jun 5, 2024
0.1.0 May 18, 2024

#3 in #teeworlds

Download history 3/week @ 2024-07-15 121/week @ 2024-08-12 158/week @ 2024-08-19 37/week @ 2024-08-26 23/week @ 2024-09-16 29/week @ 2024-09-23 49/week @ 2024-09-30

101 downloads per month
Used in 5 crates (4 directly)

AGPL-3.0-only

88KB
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

~8MB
~143K SLoC