#ddnet #teeworlds #snapshot #snap #goal #i32 #enums

bin+lib twsnap

Common snapshot format between TwGpu and TwGame

2 releases

0.1.1 Jun 5, 2024
0.1.0 May 18, 2024

#3 in #snap

Download history 160/week @ 2024-05-13 29/week @ 2024-05-20 129/week @ 2024-06-03

318 downloads per month
Used in 4 crates

AGPL-3.0-only

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

~6.5MB
~126K SLoC