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

bin+lib twsnap

Common snapshot format between TwGpu and TwGame

15 releases (6 breaking)

0.7.3 Dec 27, 2024
0.7.1 Nov 23, 2024
0.1.1 Jun 5, 2024

#1 in #arrayvec

Download history 16/week @ 2024-09-18 38/week @ 2024-09-25 34/week @ 2024-10-02 32/week @ 2024-10-09 8/week @ 2024-10-16 14/week @ 2024-10-23 306/week @ 2024-10-30 153/week @ 2024-11-06 430/week @ 2024-11-13 308/week @ 2024-11-20 149/week @ 2024-11-27 89/week @ 2024-12-04 48/week @ 2024-12-11 2/week @ 2024-12-18 149/week @ 2024-12-25 14/week @ 2025-01-01

227 downloads per month
Used in 7 crates (3 directly)

AGPL-3.0-only

87KB
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
~140K SLoC