I am proud to announce, Version 1 of the Tool Assisted Speedrun Dump (TASD) format specification has officially released!
Site: https://tasd.io/
Github: https://github.com/tasd-org/tasd-spec
Feel free to ask questions here or message me in Discord.
TAS Replay Refresher
In order to properly replay a TAS movie on real hardware, we need a sequence of controller inputs to feed to the console. However, due to how most emulators are designed, the input values a TASer sets in their movie does not necessarily represent what a real controller is doing.
For example, most cores in BizHawk represent each row in TAStudio as a single input for an entire frame. However, in reality, the console may be reading inputs from the controller multiple times, or even zero times, during each frame. In order to rectify this inconsistency, scripts are used to "dump" the inputs into a new format that contains sufficient information to replay the TAS.
History
Previously, dump formats were designed to be "good enough" for the immediate use-case of the person replaying the TASes. After I had started console verifying TASes, I quickly began noticing the severe limitations of those old formats (e.g. no reset support, different interpretations of the data, no way to identify which ROM to use.) So I felt there needed to be a new format; ideally something that would work regardless of which console or replay device was being used.
ViGrey and I started this project back in 2021 after we both shared interest into creating a new format. Vi has been a massive help, writing up the bulk of the specification document and working with me to form the core layout and structure of the format. Progress has been especially slow the last few years; I hadn't worked on it at all during 2024. Slowly but surely though, work has progressed and here we are.
Feature Highlights
TASD is designed to be as hardware and software agnostic as reasonably possible. Both the creation and parsing of the format should be doable on most architectures, even microcontrollers, and with (practically) all programming languages. While intended as a
file format, it can also be used to stream input and configuration data (no reliance on pointers to other files or other segments of data).
The format itself explicitly supports the NES, SNES, N64, GameCube, Game Boy / Color / Advance, Sega Genesis, and Atari 2600. Adding additional systems is relatively simple and won't break backwards
or forwards compatibility. Though, software will still need to be written to handle these systems appropriately.
Other metadata is supported too. Such as attributions (for several different roles), ROM identification, verified status, game-genie codes, memory initialization, and more!
Check out the
specification for all the details. A word of caution though: it's very dry reading! There may still be some ambiguities or wording issues that I've missed, so let me know if something doesn't sound right.
Dump Scripts and Parsers
Nothing at the moment... Getting the specification out first was higher priority.
JS/TypeScript and Rust parsers should be available soon. Go, C, and Python parsers are likely to happen in the future. I have an outdated Lua serializer that I'll either update or rewrite eventually.