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

bin+lib twsnap

Common snapshot format between TwGpu and TwGame

11 releases (5 breaking)

new 0.6.3 Nov 17, 2024
0.6.2 Nov 17, 2024
0.5.0 Nov 5, 2024
0.4.0 Nov 4, 2024
0.1.0 May 18, 2024

#4 in #teeworlds

Download history 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 26/week @ 2024-10-07 15/week @ 2024-10-14 15/week @ 2024-10-21 16/week @ 2024-10-28 442/week @ 2024-11-04 334/week @ 2024-11-11

808 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

~8MB
~142K SLoC