From 078bb10ef377cb9a090f33932fa7e01ec23bd6d5 Mon Sep 17 00:00:00 2001 From: bigbass1997 Date: Fri, 13 Oct 2023 12:56:33 -0500 Subject: Removed Other encoding from GAME_IDENTIFIER and performed editing pass over descriptions and introduction summary --- docs/latest/draft-tasd-spec.html | 830 +++++++++++++++++++-------------------- docs/latest/draft-tasd-spec.txt | 103 +++-- 2 files changed, 461 insertions(+), 472 deletions(-) (limited to 'docs/latest') diff --git a/docs/latest/draft-tasd-spec.html b/docs/latest/draft-tasd-spec.html index e4be46b..dd70bf9 100644 --- a/docs/latest/draft-tasd-spec.html +++ b/docs/latest/draft-tasd-spec.html @@ -12,25 +12,14 @@ The TASD file format is used for storing "Tool Assisted Speedrun" or "Tool Assisted Superplay" (TAS) data for TAS replay devices to replay on physical video game console hardware. The format is defined to be expandable for future needs. The format is also defined to be parsable by programs that do not understand portions of the format, whether that is due to incomplete support of the format specification or due to new features being added to later versions of the specification at a later date. This document defines the file format specification for TASD files. ' name="description"> - + - + - + @@ -1217,10 +1187,6 @@ li > p:last-of-type:only-child {
Workgroup:
Independent TAS Console Replay Research Group
-
Published:
-
- -
Authors:
@@ -1243,233 +1209,233 @@ li > p:last-of-type:only-child {
- ▲

-Table of Contents + ▲

+Table of Contents

@@ -1604,20 +1570,20 @@ li > p:last-of-type:only-child {
-

-1. Introduction +

+1. Introduction

The Tool Assisted Speedrun Dump (TASD) interchange format is a file format for storing data to allow "Tool Assisted Speedruns" or "Tool Assisted Superplays" to be played on physical video game console hardware using TAS replay devices. Created to be hardware and software agnostic, the TASD interchange format uses a key-based, binary, packet format to break up pieces of information into easily-parsable and forward-compatible chunks. The format is extensible by simply defining additional keys or value types as necessary. When parsing the file, software can skip any packets whose key is unknown or unsupported.

-

Keys can be used multiple times or completely omitted as needed. This reusability eliminates the need of a predefined delimiter to separate pieces of data such as a list of TAS authors.

-

While files generated by emulator dump scripts should provide as much information as possible, because keys are optional, the file can be expanded later with any additional data as desired. No intermediary file format is necessary.

+

Packets of a given type can be used multiple times or completely omitted as needed. This reusability eliminates the need of a predefined delimiter to separate pieces of data such as a list of TAS authors.

+

While files generated by emulator dump scripts should provide as much information as possible, because packets are optional, the file can be expanded later with any additional data as desired. No intermediary file format is necessary.

-

-1.1. Overview and Preliminaries +

+1.1. Overview and Preliminaries

-

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

+

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

-

-1.1.1. Notation and Vocabulary +

+1.1.1. Notation and Vocabulary

Data Types:

    @@ -1637,7 +1603,7 @@ li > p:last-of-type:only-child {

    We use the terms byte and octet interchangeably in this document.

    Unless specified otherwise, all multi-octet integers are big-endian.

    We use the terms Tool Assisted Speedrun, Tool Assisted Superplay and TAS interchangeably in this document.

    -

    In subsections of (Section 4.2), the term "in direct form" is used. That term is defined to mean a packet in a TASD file directly (first order packet) rather than a packet inside a TRANSITION or MOVIE_TRANSITION packet (second order packet).

    +

    In subsections of (Section 4.2), the term "in direct form" is used. That term is defined to mean a packet in a TASD file directly (first order packet) rather than a packet inside a TRANSITION or MOVIE_TRANSITION packet (second order packet).

    String values MUST use UTF-8 encoding. If an example of a string value is given, the example will be between quotation marks. The quotation marks are not included in the string. Not all content between quotations will be string value examples, so be aware of that when continuing through this document.

    Unsigned and signed integers can have different bit widths. For instance, an 8-bit integer can be used in one part of the specification and a 64-bit integer can be used in another part of the specification.

    Boolean values MUST be a single octet with the value of 0 for FALSE or 1 for TRUE.

    @@ -1741,8 +1707,8 @@ li > p:last-of-type:only-child {
-

-1.2. Motivations +

+1.2. Motivations

This file format's primary goal is to provide a comprehensive and replay device agnostic TAS movie controller input dump format that is usable for any console. Additional goals include:

    @@ -1755,20 +1721,20 @@ li > p:last-of-type:only-child {
  • Ability to easily generate using lua scripting in emulators
-

Consideration was also given to how usable the format would be for the software that interacts with replay devices (examples: methods of ingestion/parsing, ease of ingestion/parsing in various languages).

+

Consideration is also given to how usable the format would be for the software that interacts with replay devices (examples: methods of ingestion/parsing, ease of ingestion/parsing in various languages).

-

-1.2.1. Problems With Existing Formats +

+1.2.1. Problems With Existing Formats

-

Most existing formats are either incomplete for some verification needs or don't exist at all for some consoles. A format commonly used for NES console verifications (r08) only encodes 2 standard controllers worth of sequential data and a format commonly used for SNES console verifications (r16m) only encodes up to 8 standard controllers worth of sequential data. There is no built in way to store RESET press timing information or indicate additional settings/information. Non-standard controllers are also not supported in commonly used formats.

-

For consoles not as popular as the NES and SNES, controller input formats would frequently be written in a way that is meant only to work and not in a "standard" way. While that process works, it's less than ideal for redistribution of console replays so that others (especially with differing TAS replay devices) can also verify the same TAS.

+

Most existing formats are either incomplete for some verification needs or don't exist at all for some consoles. A format commonly used for NES console verifications (r08) only encodes 2 standard controllers worth of sequential data and a format commonly used for SNES console verifications (r16m) only encodes up to 8 standard controllers worth of sequential data. There is no built in way to store RESET timing information or indicate additional settings/information. Non-standard controllers are also not supported in commonly used formats.

+

For consoles not as popular as the NES and SNES, controller input formats would frequently be written in a way that is meant only to work and not in a "standard" way. While that process works for a specific device, it's less than ideal for redistribution of console replays so that others (especially with differing TAS replay devices) can also verify the same TAS.

-

-2. Structure +

+2. Structure

TASD files MUST begin with a header. The header MUST be followed by 0 or more packets.

@@ -1784,19 +1750,19 @@ li > p:last-of-type:only-child {
Header
-
7 octet header as defined in Section 3. +
7 octet header as defined in Section 3.
Packets
-
List of 0 or more packets. Refer to Section 4 for packet definitions. +
List of 0 or more packets. Refer to Section 4 for packet definitions.

All packets are OPTIONAL.

-

-4.1. Assigned Packet Keys Without Descriptions +

+4.1. Assigned Packet Keys Without Descriptions

-

-4.1.1. General Keys +

+4.1.1. General Keys

[00 01]
@@ -1972,8 +1938,8 @@ li > p:last-of-type:only-child {
-

-4.1.2. NES Specific Keys +

+4.1.2. NES Specific Keys

[01 01]
@@ -1991,8 +1957,8 @@ li > p:last-of-type:only-child {
-

-4.1.3. SNES Specific Keys +

+4.1.3. SNES Specific Keys

[02 01]
@@ -2014,8 +1980,8 @@ li > p:last-of-type:only-child {
-

-4.1.4. Genesis Specific Keys +

+4.1.4. Genesis Specific Keys

[08 04]
@@ -2025,8 +1991,8 @@ li > p:last-of-type:only-child {
-

-4.1.5. Input Frame/Timing Keys +

+4.1.5. Input Frame/Timing Keys

[FE 01]
@@ -2052,8 +2018,8 @@ li > p:last-of-type:only-child {
-

-4.1.6. Extraneous Keys +

+4.1.6. Extraneous Keys

[FF 01]
@@ -2073,242 +2039,242 @@ li > p:last-of-type:only-child {
-

-4.2. Assigned Packet Keys With Descriptions +

+4.2. Assigned Packet Keys With Descriptions

-

-4.2.1. General Key Descriptions +

+4.2.1. General Key Descriptions

[00 01] - CONSOLE_TYPE
-
Specifies console used on emulator when dumping the TAS controller inputs. This packet type is OPTIONAL but SHOULD be included in a TASD file and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.1). +
Specifies console used on emulator when dumping the TAS controller inputs. This packet type is OPTIONAL but SHOULD be included in a TASD file and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.1).
[00 02] - CONSOLE_REGION
-
Specifies video region of console used for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.2). +
Specifies video region of console used for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.2).
[00 03] - GAME_TITLE
-
Specifies the name of the game the TAS is written for. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.3). +
Specifies the name of the game the TAS is written for. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.3).
[00 04] - ROM_NAME
-
Specifies the name of the specific ROM file used for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.4). +
Specifies the name of the specific ROM file used for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.4).
[00 05] - ATTRIBUTION
-
Specifies the name of someone involved in the TAS or the creation or management of the TASD file in order to provide proper attribution for work done. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.5). +
Specifies the name of someone involved in the TAS or the creation or management of the TASD file in order to provide proper attribution for work done. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.5).
[00 06] - CATEGORY
-
Specifies the run category of the TAS. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.6). +
Specifies the run category of the TAS. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.6).
[00 07] - EMULATOR_NAME
-
Specifies the emulator used while dumping TAS controller inputs. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.7). +
Specifies the emulator used while dumping TAS controller inputs. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.7).
[00 08] - EMULATOR_VERSION
-
Specifies the version of the emulator used while dump the TAS controller inputs. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.8). +
Specifies the version of the emulator used while dump the TAS controller inputs. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.8).
[00 09] - EMULATOR_CORE
-
Specifies the core of the emulator used while dumping the TAS controller inputs. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.9). +
Specifies the core of the emulator used while dumping the TAS controller inputs. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.9).
[00 0A] - TAS_LAST_MODIFIED
-
Specifies when the TAS was last modified. Frequently used to specify the date and time when the TAS was published. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.10). +
Specifies when the TAS was last modified. Frequently used to specify the date and time when the TAS was published. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.10).
[00 0B] - DUMP_CREATED
-
Specifies when the TASD file was first created. This packet is OPTIONAL but SHOULD be included in a TASD file and a TASD file SHOULD NOT contain more than 1 of this packet type. Discussed in (Section 4.3.1.11). +
Specifies when the TASD file was first created. This packet is OPTIONAL but SHOULD be included in a TASD file and a TASD file SHOULD NOT contain more than 1 of this packet type. Discussed in (Section 4.3.1.11).
[00 0C] - DUMP_LAST_MODIFIED
-
Specifies when the TASD file was last modified. This packet is OPTIONAL but SHOULD be included in a TASD file and a TASD file SHOULD NOT contain more than 1 of this packet type. Discussed in (Section 4.3.1.12). +
Specifies when the TASD file was last modified. This packet is OPTIONAL but SHOULD be included in a TASD file and a TASD file SHOULD NOT contain more than 1 of this packet type. Discussed in (Section 4.3.1.12).
[00 0D] - TOTAL_FRAMES
-
Specifies the total number of frames in the TAS. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.13). +
Specifies the total number of frames in the TAS. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.13).
[00 0E] - RERECORDS
-
Specifies the total number of rerecords of the TAS. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.14). +
Specifies the total number of rerecords of the TAS. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.14).
[00 0F] - SOURCE_LINK
-
Specifies the source link for the TAS. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type. Discussed in (Section 4.3.1.15). +
Specifies the source link for the TAS. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type. Discussed in (Section 4.3.1.15).
[00 10] - BLANK_FRAMES
-
Specifies the number of blank controller inputs or frames to prepend to the inputs of the TAS when played on hardware. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.16). +
Specifies the number of blank controller inputs or frames to prepend to the inputs of the TAS when played on hardware. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.16).
[00 11] - VERIFIED
-
Specifies whether the TAS is verified to run on hardware, also known as "console verified", using the TASD file. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.17). +
Specifies whether the TAS is verified to run on hardware, also known as "console verified", using the TASD file. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.17).
[00 12] - MEMORY_INIT
-
Specifies initial memory values used for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.18). +
Specifies initial memory values used for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.18).
[00 13] - GAME_IDENTIFIER
-
Specifies an identifier for the game the TAS is written for. This can be checksums, hashes, or other identifying data. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.19). +
Specifies an identifier for the game the TAS is written for. This can be checksums, hashes, or other identifying data. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.19).
[00 14] - MOVIE_LICENSE
-
Specifies a copyright license for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.20). +
Specifies a copyright license for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.1.20).
[00 15] - MOVIE_FILE
-
Specifies the TAS movie data. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type. Discussed in (Section 4.3.1.21). +
Specifies the TAS movie data. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type. Discussed in (Section 4.3.1.21).
[00 F0] - PORT_CONTROLLER
-
Specifies the controller type in specific console controller ports for the TAS when played on hardware. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.22). +
Specifies the controller type in specific console controller ports for the TAS when played on hardware. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.1.22).
[00 F1] - PORT_OVERREAD
-
Specifies whether a high or low signal SHOULD be sent through a specified controller port of the console if the console requests more input data from the replay device through that controller port than expected. This packet type is OPTIONAL. Discussed in (Section 4.3.1.23). +
Specifies whether a high or low signal SHOULD be sent through a specified controller port of the console if the console requests more input data from the replay device through that controller port than expected. This packet type is OPTIONAL. Discussed in (Section 4.3.1.23).
-

-4.2.2. NES Specific Key Descriptions +

+4.2.2. NES Specific Key Descriptions

[01 01] - NES_LATCH_FILTER
-
Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.2.1). +
Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.2.1).
[01 02] - NES_CLOCK_FILTER
-
Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.2.2). +
Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.2.2).
[01 04] - NES_GAME_GENIE_CODE
-
Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.2.3). +
Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.2.3).
-

-4.2.3. SNES Specific Key Descriptions +

+4.2.3. SNES Specific Key Descriptions

[02 01] - SNES_LATCH_FILTER
-
Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.3.1). +
Specifies a latch filter time in microseconds for how long how long to wait after a latch signal until new latch signals SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.3.1).
[02 02] - SNES_CLOCK_FILTER
-
Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.3.2). +
Specifies a clock filter time in tenths of a microsecond (0.1 microseconds or 100 nanoseconds) for how long to wait after a clock pulse until new clock pulses SHOULD be accepted by the replay device. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type in direct form. Discussed in (Section 4.3.3.2).
[02 04] - SNES_GAME_GENIE_CODE
-
Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.3.3). +
Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.3.3).
[02 05] - SNES_LATCH_TRAIN
-
Specifies Latch Trains for TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.3.4). +
Specifies Latch Trains for TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.3.4).
-

-4.2.4. Genesis Specific Key Descriptions +

+4.2.4. Genesis Specific Key Descriptions

[08 04] - GENESIS_GAME_GENIE_CODE
-
Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.4.1). +
Specifies a Game Genie code for the TAS. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.4.1).
-

-4.2.5. Input Frame/Timing Key Descriptions +

+4.2.5. Input Frame/Timing Key Descriptions

[FE 01] - INPUT_CHUNK
-
Specifies a chunk of input data for the TAS when played on hardware. All data from INPUT_CHUNK packets are concatenated together in order of appearance in the TASD file. If the INPUT_CHUNK packet type is used, the PORT_CONTROLLER packet type MUST be used. If the INPUT_CHUNK packet type is used, the INPUT_MOMENT packet type SHOULD NOT be used. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.5.1). +
Specifies a chunk of input data for the TAS when played on hardware. All data from INPUT_CHUNK packets are concatenated together in order of appearance in the TASD file. If the INPUT_CHUNK packet type is used, the PORT_CONTROLLER packet type MUST be used. If the INPUT_CHUNK packet type is used, the INPUT_MOMENT packet type SHOULD NOT be used. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.5.1).
[FE 02] - INPUT_MOMENT
-
Specifies input data that is sent from the replay device to the console with specific timing. If the INPUT_MOMENT packet type is used, the PORT_CONTROLLER packet type MUST be used. If the INPUT_MOMENT packet type is used, the INPUT_CHUNK packet type SHOULD NOT be used. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.5.2). +
Specifies input data that is sent from the replay device to the console with specific timing. If the INPUT_MOMENT packet type is used, the PORT_CONTROLLER packet type MUST be used. If the INPUT_MOMENT packet type is used, the INPUT_CHUNK packet type SHOULD NOT be used. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.5.2).
[FE 03] - TRANSITION
-
Specifies when a transition or change occurs during a TAS replay (example: console reset or changing of controller types). This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.5.3). +
Specifies when a transition or change occurs during a TAS replay (example: console reset or changing of controller types). This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.5.3).
[FE 04] - LAG_FRAME_CHUNK
-
Specifies a chunk of lag frames in a TAS based on the original TAS movie. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.5.4). +
Specifies a chunk of lag frames in a TAS based on the original TAS movie. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.5.4).
[FE 05] - MOVIE_TRANSITION
-
Specifies when a transition or change occurs in the original TAS movie (example: console reset or changing of controller types). This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.5.5). +
Specifies when a transition or change occurs in the original TAS movie (example: console reset or changing of controller types). This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.5.5).
-

-4.2.6. Extraneous Key Descriptions +

+4.2.6. Extraneous Key Descriptions

[FF 01] - COMMENT
-
Comment data. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.6.1). +
Comment data. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.6.1).
[FF FE] - EXPERIMENTAL
-
TASD file is using draft/experimental packets. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type. Discussed in (Section 4.3.6.2). +
TASD file is using draft/experimental packets. This packet type is OPTIONAL and a TASD file SHOULD NOT contain more than 1 of this packet type. Discussed in (Section 4.3.6.2).
[FF FF] - UNSPECIFIED
-
Unspecified packet data. Can contain any arbitrary data. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.6.3). +
Unspecified packet data. Can contain any arbitrary data. This packet type is OPTIONAL and a TASD file MAY contain more than 1 of this packet type. Discussed in (Section 4.3.6.3).
@@ -2316,17 +2282,17 @@ li > p:last-of-type:only-child {
-

-4.3. Packet Payload Formats +

+4.3. Packet Payload Formats

-

-4.3.1. General Key Payload Formats +

+4.3.1. General Key Payload Formats

-
-4.3.1.1. CONSOLE_TYPE Packet +
+4.3.1.1. CONSOLE_TYPE Packet

CONSOLE_TYPE packets MUST be in the following format:

@@ -2368,8 +2334,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.2. CONSOLE_REGION Packet +
+4.3.1.2. CONSOLE_REGION Packet

CONSOLE_REGION packets MUST be in the following format:

@@ -2395,8 +2361,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.3. GAME_TITLE Packet +
+4.3.1.3. GAME_TITLE Packet

GAME_TITLE packets MUST be in the following format:

@@ -2423,8 +2389,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.4. ROM_NAME Packet +
+4.3.1.4. ROM_NAME Packet

ROM_NAME packets MUST be in the following format:

@@ -2451,8 +2417,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.5. ATTRIBUTION Packet +
+4.3.1.5. ATTRIBUTION Packet

ATTRIBUTION packets MUST be in the following format:

@@ -2473,7 +2439,7 @@ li > p:last-of-type:only-child {
Type
-
Function of the person who is being attributed. Author is meant for a TAS movie author. Verifier is meant for a person who initially console verified the the TAS movie using the TASD file. TASD File Creator is meant for the person who initially dumped the TAS movie controller inputs into the TASD file. TASD File Editor is meant for a person who edited the TASD file. +
Function of the person who is being attributed. Author is meant for a TAS movie author. Verifier is meant for a person who console verified the TAS movie(s) contained in the TASD file. TASD File Creator is meant for the person who initially created the TASD file, such as when dumping inputs from a TAS movie. TASD File Editor is meant for a person who edited the TASD file.
Name
@@ -2489,8 +2455,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.6. CATEGORY Packet +
+4.3.1.6. CATEGORY Packet

CATEGORY packets MUST be in the following format:

@@ -2505,7 +2471,7 @@ li > p:last-of-type:only-child {
Category
-
Name of the TAS movie run category (example: "Any %", "100%", "No Warps"). +
Name of the TAS movie run category (example: "any%", "100%", "No Warps").
PLEN
@@ -2517,8 +2483,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.7. EMULATOR_NAME Packet +
+4.3.1.7. EMULATOR_NAME Packet

EMULATOR_NAME packets MUST be in the following format:

@@ -2533,7 +2499,7 @@ li > p:last-of-type:only-child {
Name
-
Name of the emulator used to play the TAS movie while dumping controller inputs (example: "FCEUX", "Bizhawk"). +
Name of the emulator used to play the TAS movie while dumping controller inputs (example: "FCEUX", "Bizhawk"). The emulator's version or core name SHOULD NOT be included.
PLEN
@@ -2545,8 +2511,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.8. EMULATOR_VERSION Packet +
+4.3.1.8. EMULATOR_VERSION Packet

EMULATOR_VERSION packets MUST be in the following format:

@@ -2573,8 +2539,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.9. EMULATOR_CORE Packet +
+4.3.1.9. EMULATOR_CORE Packet

EMULATOR_CORE packets MUST be in the following format:

@@ -2601,8 +2567,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.10. TAS_LAST_MODIFIED Packet +
+4.3.1.10. TAS_LAST_MODIFIED Packet

TAS_LAST_MODIFIED packets MUST be in the following format:

@@ -2625,8 +2591,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.11. DUMP_CREATED Packet +
+4.3.1.11. DUMP_CREATED Packet

DUMP_CREATED packets MUST be in the following format:

@@ -2649,8 +2615,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.12. DUMP_LAST_MODIFIED Packet +
+4.3.1.12. DUMP_LAST_MODIFIED Packet

DUMP_LAST_MODIFIED packets MUST be in the following format:

@@ -2673,8 +2639,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.13. TOTAL_FRAMES Packet +
+4.3.1.13. TOTAL_FRAMES Packet

TOTAL_FRAMES packets MUST be in the following format:

@@ -2697,8 +2663,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.14. RERECORDS Packet +
+4.3.1.14. RERECORDS Packet

RERECORDS packets MUST be in the following format:

@@ -2721,8 +2687,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.16. BLANK_FRAMES Packet +
+4.3.1.16. BLANK_FRAMES Packet

BLANK_FRAMES packets MUST be in the following format:

@@ -2765,7 +2731,7 @@ li > p:last-of-type:only-child {
Frames
-
Number of blank frames (inputs where no buttons are being pressed) needed at the beginning of a TAS console replay of the TAS movie. If Frames is a negative value, the value of Frames amount of inputs of the TAS console replay of the TAS movie should be removed. +
Number of blank frames (of input where no buttons are being pressed) needed at the beginning of a TAS replay. If Frames is a negative value, the value of Frames indicates the number of frames that should be skipped from the TAS input data. A negative value is not applicable if there is no way to determine how much input data should be skipped (e.g. NES with INPUT_CHUNKs where each input represents a single latch).
@@ -2773,8 +2739,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.17. VERIFIED Packet +
+4.3.1.17. VERIFIED Packet

VERIFIED packets MUST be in the following format:

@@ -2797,8 +2763,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.18. MEMORY_INIT Packet +
+4.3.1.18. MEMORY_INIT Packet

MEMORY_INIT packets MUST be in the following format:

@@ -2876,13 +2842,13 @@ li > p:last-of-type:only-child {
-
-4.3.1.19. GAME_IDENTIFIER Packet +
+4.3.1.19. GAME_IDENTIFIER Packet

GAME_IDENTIFIER packets MUST be in the following format:

-           0          1          2         3...       3+NLEN...
+           0            1            2         3...        3+NLEN...
       +----------+--------------+----------+==========+================+
       | Type (A) | Encoding (A) | NLEN (N) | Name (S) | Identifier (A) |
       +----------+--------------+----------+==========+================+
@@ -2905,10 +2871,9 @@ li > p:last-of-type:only-child {
          [FF] - Other
       Encoding (Binary Data):                 [1 octet]
          [01] - Raw Binary
-         [02] - Case Insensitive Base 16 (Hex) - RFC 4648
-         [03] - Case Insensitive Base 32 - RFC 4648
-         [04] - Base 64 - RFC 4648
-         [FF] - Other
+         [02] - Base 16 (Case Insensitive)
+         [03] - Base 32 (Case Insensitive)
+         [04] - Base 64
       NLEN (Unsigned Integer)                 [1 octet]
       Name (String)                           [NLEN octets]
       Identifier (Binary Data)                [PLEN - 2 octets]
@@ -2916,11 +2881,11 @@ li > p:last-of-type:only-child {
 
Type
-
Hash, checksum, or identifier algorithm Identifier is using. +
Hash, checksum, or identifier algorithm used to create the Identifier.
Encoding
-
Describes the data encoding of Identifier. +
Describes the data encoding of Identifier. Raw binary indicates no encoding is used. Base16/32/64 all use the standard RFC 4648 encodings, without extensions. Base 16 and Base 32 are case-insensitive.
NLEN
@@ -2928,7 +2893,7 @@ li > p:last-of-type:only-child {
Name
-
Name of Type meant if the hash, checksum, or identifier algorithm Identifier is using is not included in Type. If Type is [FF], Name SHOULD NOT be empty (0 octet length string). +
Name of the hash, checksum, or identifier algorithm used to create the Identifier. If Type is not [FF], Name SHOULD be empty (0 octet length binary data).
Identifier
@@ -2944,8 +2909,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.20. MOVIE_LICENSE Packet +
+4.3.1.20. MOVIE_LICENSE Packet

MOVIE_LICENSE packets MUST be in the following format:

@@ -2972,8 +2937,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.21. MOVIE_FILE Packet +
+4.3.1.21. MOVIE_FILE Packet

MOVIE_FILE packets MUST be in the following format:

@@ -3011,8 +2976,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.22. PORT_CONTROLLER Packet +
+4.3.1.22. PORT_CONTROLLER Packet

PORT_CONTROLLER packets MUST be in the following format:

@@ -3060,7 +3025,7 @@ li > p:last-of-type:only-child {
Type
-
Specifies the controller type connected to the Port. (RESERVED) specifies that the controller type is not described in this document, but the byte values are reserved for a later version of the TASD file format protocol. Input formats for specific controller types are described in (Section 5). +
Specifies the controller type connected to the Port. (RESERVED) specifies that the controller type is not described in this document, but the byte values are reserved for a later version of the TASD file format protocol. Input formats for specific controller types are described in (Section 5).
@@ -3068,8 +3033,8 @@ li > p:last-of-type:only-child {
-
-4.3.1.23. PORT_OVERREAD Packet +
+4.3.1.23. PORT_OVERREAD Packet

PORT_OVERREAD packets MUST be in the following format:

@@ -3097,13 +3062,13 @@ li > p:last-of-type:only-child {
-

-4.3.2. NES Specific Key Payload Formats +

+4.3.2. NES Specific Key Payload Formats

-
-4.3.2.1. NES_LATCH_FILTER Packet +
+4.3.2.1. NES_LATCH_FILTER Packet

NES_LATCH_FILTER packets MUST be in the following format:

@@ -3126,8 +3091,8 @@ li > p:last-of-type:only-child {
-
-4.3.2.2. NES_CLOCK_FILTER Packet +
+4.3.2.2. NES_CLOCK_FILTER Packet

NES_CLOCK_FILTER packets MUST be in the following format:

@@ -3150,8 +3115,8 @@ li > p:last-of-type:only-child {
-
-4.3.2.3. NES_GAME_GENIE_CODE Packet +
+4.3.2.3. NES_GAME_GENIE_CODE Packet

NES_GAME_GENIE_CODE packets MUST be in the following format:

@@ -3178,13 +3143,13 @@ li > p:last-of-type:only-child {
-

-4.3.3. SNES Specific Key Payload Formats +

+4.3.3. SNES Specific Key Payload Formats

-
-4.3.3.1. SNES_LATCH_FILTER Packet +
+4.3.3.1. SNES_LATCH_FILTER Packet

SNES_LATCH_FILTER packets MUST be in the following format:

@@ -3207,8 +3172,8 @@ li > p:last-of-type:only-child {
-
-4.3.3.2. SNES_CLOCK_FILTER Packet +
+4.3.3.2. SNES_CLOCK_FILTER Packet

SNES_CLOCK_FILTER packets MUST be in the following format:

@@ -3231,8 +3196,8 @@ li > p:last-of-type:only-child {
-
-4.3.3.3. SNES_GAME_GENIE_CODE Packet +
+4.3.3.3. SNES_GAME_GENIE_CODE Packet

SNES_GAME_GENIE_CODE packets MUST be in the following format:

@@ -3259,8 +3224,8 @@ li > p:last-of-type:only-child {
-
-4.3.3.4. SNES_LATCH_TRAIN Packet +
+4.3.3.4. SNES_LATCH_TRAIN Packet

SNES_LATCH_TRAIN packets MUST be in the following format:

@@ -3288,13 +3253,13 @@ li > p:last-of-type:only-child {
-

-4.3.4. Genesis Specific Key Payload Formats +

+4.3.4. Genesis Specific Key Payload Formats

-
-4.3.4.1. GENESIS_GAME_GENIE_CODE Packet +
+4.3.4.1. GENESIS_GAME_GENIE_CODE Packet

GENESIS_GAME_GENIE_CODE packets MUST be in the following format:

@@ -3321,13 +3286,13 @@ li > p:last-of-type:only-child {
-

-4.3.5. Input Frame/Timing Key Payload Formats +

+4.3.5. Input Frame/Timing Key Payload Formats

-
-4.3.5.1. INPUT_CHUNK Packet +
+4.3.5.1. INPUT_CHUNK Packet

INPUT_CHUNK packets MUST be in the following format:

@@ -3347,7 +3312,7 @@ li > p:last-of-type:only-child {
Inputs
-
Controller input data for controller on Port. Input values are usually in native format (usually active-low). Input formats for specific controller types are described in (Section 5). +
Controller input data for controller on Port. Input values are usually in native format (usually active-low). Input formats for specific controller types are described in Section 5.
PLEN
@@ -3356,12 +3321,13 @@ li > p:last-of-type:only-child {

A single INPUT_CHUNK packet MAY contain up to every input of a TAS movie console replay and MAY contain fewer than every input of a TAS movie console replay. If there are more than 1 INPUT_CHUNK packets, the INPUT_CHUNK packets MUST be in order of the TAS movie console replay inputs, where earlier inputs in the TAS movie console replay are earlier in the TASD file and later inputs in the TAS movie console replay are later in the TASD file.

+

The input data contained in Inputs is divided up based on the PORT_CONTROLLER type corresponding to the Port number. Refer to Section 5 for each available type and the number of bytes used for each instance of controller input. Keep in mind that the PORT_CONTROLLER type can be changed using TRANSITION packets.

-
-4.3.5.2. INPUT_MOMENT Packet +
+4.3.5.2. INPUT_MOMENT Packet

INPUT_MOMENT packets MUST be in the following format:

@@ -3400,7 +3366,7 @@ li > p:last-of-type:only-child {
Inputs
-
Controller input data for controller on Port. Input values are usually in native format (usually active-low). Input formats for specific controller types are described in (Section 5). +
Controller input data for controller on Port. Input values are usually in native format (usually active-low). Input formats for specific controller types are described in Section 5.
PLEN
@@ -3408,12 +3374,13 @@ li > p:last-of-type:only-child {
+

The input data contained in Inputs is divided up based on the PORT_CONTROLLER type corresponding to the Port number. Refer to Section 5 for each available type and the number of bytes used for each instance of controller input. Keep in mind that the PORT_CONTROLLER type can be changed using TRANSITION packets.

-
-4.3.5.3. TRANSITION Packet +
+4.3.5.3. TRANSITION Packet

TRANSITION packets MUST be in the following format:

@@ -3473,8 +3440,8 @@ li > p:last-of-type:only-child {
-
-4.3.5.4. LAG_FRAME_CHUNK Packet +
+4.3.5.4. LAG_FRAME_CHUNK Packet

LAG_FRAME_CHUNK packets MUST be in the following format:

@@ -3498,12 +3465,13 @@ li > p:last-of-type:only-child {
+

Emulators typically consider a "lag frame" to be any frame in which the emulator believes the game does not poll/read controller inputs.

-
-4.3.5.5. MOVIE_TRANSITION +
+4.3.5.5. MOVIE_TRANSITION

MOVIE_TRANSITION packets MUST be in the following format:

@@ -3544,13 +3512,13 @@ li > p:last-of-type:only-child {
-

-4.3.6. Extraneous Key Payload Formats +

+4.3.6. Extraneous Key Payload Formats

-
-4.3.6.1. COMMENT Packet +
+4.3.6.1. COMMENT Packet

COMMENT packets MUST be in the following format:

@@ -3577,8 +3545,8 @@ li > p:last-of-type:only-child {
-
-4.3.6.2. EXPERIMENTAL Packet +
+4.3.6.2. EXPERIMENTAL Packet

EXPERIMENTAL packets MUST be in the following format:

@@ -3605,8 +3573,8 @@ li > p:last-of-type:only-child {
-
-4.3.6.3. UNSPECIFIED Packet +
+4.3.6.3. UNSPECIFIED Packet

UNSPECIFIED packets MUST be in the following format:

@@ -3621,7 +3589,7 @@ li > p:last-of-type:only-child {
Unspecified Data
-
Arbitrary data. Can be used for any data. Because this is unspecified data, there there is no guarantee any software to control a TAS replay device will support data in this packet type. +
Arbitrary data. Can be used for any data. Because this is unspecified data, there is no guarantee any software used to control a TAS replay device will support data in this packet type.
PLEN
@@ -3637,19 +3605,19 @@ li > p:last-of-type:only-child {
-

-5. Controller Input Formats +

+5. Controller Input Formats

A forward slash (/) is used to signify active low. As an example, if a bit is labeled as /A, the bit MUST be 0 if the A button is pressed and MUST be 1 if the A button is not pressed.

Multi-octet controller inputs are in little-endian order

Bit order for octets in controller inputs are high-order (MSB) (Most significant bit to least significant bit), so bit 7 MUST be the left-most bit of the octet and bit 0 MUST be the right-most bit of the octet.

-

-5.1. NES/Famicom Controller Types +

+5.1. NES/Famicom Controller Types

-

-5.1.1. NES Standard Controller +

+5.1.1. NES Standard Controller

Single Input Length: 1 Octet

Octet 0

@@ -3689,8 +3657,8 @@ li > p:last-of-type:only-child {
-

-5.1.2. NES Four Score +

+5.1.2. NES Four Score

Single Input Length: 3 Octets

Octet 0

@@ -3802,12 +3770,12 @@ li > p:last-of-type:only-child {
-

-5.2. SNES Controller Types +

+5.2. SNES Controller Types

-

-5.2.1. SNES Standard Controller +

+5.2.1. SNES Standard Controller

Single Input Length: 2 Octets

Octet 0

@@ -3882,8 +3850,8 @@ li > p:last-of-type:only-child {
-

-5.2.2. SNES Mouse +

+5.2.2. SNES Mouse

Single Input Length: 4 Octets

Octet 0

@@ -3980,8 +3948,8 @@ li > p:last-of-type:only-child {
-

-5.2.3. SNES Super Multitap +

+5.2.3. SNES Super Multitap

Single Input Length: 5 Octets

Octet 0 :

@@ -4163,12 +4131,12 @@ li > p:last-of-type:only-child {
-

-5.3. N64 Controller Types +

+5.3. N64 Controller Types

-

-5.3.1. N64 Standard Controller +

+5.3.1. N64 Standard Controller

Single Input Length: 4 Octets

Octet 0

@@ -4257,8 +4225,8 @@ li > p:last-of-type:only-child {
-

-5.3.2. N64 Standard Controller with Rumble +

+5.3.2. N64 Standard Controller with Rumble

Single Input Length: 4 Octets

Octet 0

@@ -4347,8 +4315,8 @@ li > p:last-of-type:only-child {
-

-5.3.3. N64 Standard Controller with Controller Pak +

+5.3.3. N64 Standard Controller with Controller Pak

Single Input Length: 4 Octets

Octet 0

@@ -4437,8 +4405,8 @@ li > p:last-of-type:only-child {
-

-5.3.4. N64 Standard Controller with Transfer Pak +

+5.3.4. N64 Standard Controller with Transfer Pak

Single Input Length: 4 Octets

Octet 0

@@ -4527,8 +4495,8 @@ li > p:last-of-type:only-child {
-

-5.3.5. N64 Mouse +

+5.3.5. N64 Mouse

Single Input Length: 4 Octets

Octet 0

@@ -4617,8 +4585,8 @@ li > p:last-of-type:only-child {
-

-5.3.6. N64 Densha de Go +

+5.3.6. N64 Densha de Go

Single Input Length: 4 Octets

Octet 0

@@ -4752,12 +4720,12 @@ li > p:last-of-type:only-child {
-

-5.4. GameCube Controller Types +

+5.4. GameCube Controller Types

-

-5.4.1. GameCube Standard Controller +

+5.4.1. GameCube Standard Controller

Single Input Length: 8 Octets

Octet 0

@@ -4875,12 +4843,12 @@ li > p:last-of-type:only-child {
-

-5.5. Game Boy Controller Types +

+5.5. Game Boy Controller Types

-

-5.5.1. GB Standard Controller +

+5.5.1. GB Standard Controller

Single Input Length: 1 Octet

Octet 0

@@ -4921,12 +4889,12 @@ li > p:last-of-type:only-child {
-

-5.6. Game Boy Color Controller Types +

+5.6. Game Boy Color Controller Types

-

-5.6.1. GBC Standard Controller +

+5.6.1. GBC Standard Controller

Single Input Length: 1 Octet

Octet 0

@@ -4967,12 +4935,12 @@ li > p:last-of-type:only-child {
-

-5.7. Game Boy Advance Controller Types +

+5.7. Game Boy Advance Controller Types

-

-5.7.1. GBA Standard Controller +

+5.7.1. GBA Standard Controller

Single Input Length: 2 Octets

Octet 0

@@ -5048,12 +5016,12 @@ li > p:last-of-type:only-child {
-

-5.8. Genesis Controller Types +

+5.8. Genesis Controller Types

-

-5.8.1. Genesis (Mega Drive) 3-Button +

+5.8.1. Genesis (Mega Drive) 3-Button

Single Input Length: 1 Octet

Octet 0

@@ -5093,8 +5061,8 @@ li > p:last-of-type:only-child {
-

-5.8.2. Genesis (Mega Drive) 6-Button +

+5.8.2. Genesis (Mega Drive) 6-Button

Single Input Length: 2 Octets

Octet 0

@@ -5170,12 +5138,12 @@ li > p:last-of-type:only-child {
-

-5.9. Atari 2600 Controller Types +

+5.9. Atari 2600 Controller Types

-

-5.9.1. A2600 Joystick +

+5.9.1. A2600 Joystick

Single Input Length: 1 Octet

Octet 0

@@ -5215,8 +5183,8 @@ li > p:last-of-type:only-child {
-

-5.9.2. A2600 Keyboard Controller +

+5.9.2. A2600 Keyboard Controller

Single Input Length: 1 Octet

Octet 0

@@ -5259,12 +5227,12 @@ li > p:last-of-type:only-child {
-

-6. References +

+6. References

-

-6.1. Normative References +

+6.1. Normative References

[RFC2119]
@@ -5279,8 +5247,8 @@ li > p:last-of-type:only-child {
-

Copyright (c) 2021-2023, Vi Grey, Bigbass, and rasteri

All rights reserved.

@@ -5295,8 +5263,8 @@ li > p:last-of-type:only-child {
-

-Authors' Addresses +

+Authors' Addresses

Vi Grey
diff --git a/docs/latest/draft-tasd-spec.txt b/docs/latest/draft-tasd-spec.txt index ef2f59e..03d279a 100644 --- a/docs/latest/draft-tasd-spec.txt +++ b/docs/latest/draft-tasd-spec.txt @@ -7,7 +7,7 @@ Independent TAS Console Replay Research Group V. Grey Bigbass rasteri - 8 October 2023 + 13 October 2023 TASD File Format Specification Version 1 @@ -143,14 +143,15 @@ Table of Contents parsing the file, software can skip any packets whose key is unknown or unsupported. - Keys can be used multiple times or completely omitted as needed. - This reusability eliminates the need of a predefined delimiter to - separate pieces of data such as a list of TAS authors. + Packets of a given type can be used multiple times or completely + omitted as needed. This reusability eliminates the need of a + predefined delimiter to separate pieces of data such as a list of TAS + authors. While files generated by emulator dump scripts should provide as much - information as possible, because keys are optional, the file can be - expanded later with any additional data as desired. No intermediary - file format is necessary. + information as possible, because packets are optional, the file can + be expanded later with any additional data as desired. No + intermediary file format is necessary. 1.1. Overview and Preliminaries @@ -282,8 +283,8 @@ Table of Contents * Ability to easily generate using lua scripting in emulators - Consideration was also given to how usable the format would be for - the software that interacts with replay devices (examples: methods of + Consideration is also given to how usable the format would be for the + software that interacts with replay devices (examples: methods of ingestion/parsing, ease of ingestion/parsing in various languages). 1.2.1. Problems With Existing Formats @@ -294,16 +295,16 @@ Table of Contents controllers worth of sequential data and a format commonly used for SNES console verifications (r16m) only encodes up to 8 standard controllers worth of sequential data. There is no built in way to - store *RESET* press timing information or indicate additional - settings/information. Non-standard controllers are also not - supported in commonly used formats. + store *RESET* timing information or indicate additional settings/ + information. Non-standard controllers are also not supported in + commonly used formats. For consoles not as popular as the NES and SNES, controller input formats would frequently be written in a way that is meant only to - work and not in a "standard" way. While that process works, it's - less than ideal for redistribution of console replays so that others - (especially with differing TAS replay devices) can also verify the - same TAS. + work and not in a "standard" way. While that process works for a + specific device, it's less than ideal for redistribution of console + replays so that others (especially with differing TAS replay devices) + can also verify the same TAS. 2. Structure @@ -799,9 +800,9 @@ Table of Contents *Type* Function of the person who is being attributed. *Author* is meant for a TAS movie author. *Verifier* is meant for a person who - initially console verified the the TAS movie using the *TASD - file*. *TASD File Creator* is meant for the person who initially - dumped the TAS movie controller inputs into the *TASD* file. + console verified the TAS movie(s) contained in the *TASD* file. + *TASD File Creator* is meant for the person who initially created + the *TASD* file, such as when dumping inputs from a TAS movie. *TASD File Editor* is meant for a person who edited the *TASD* file. @@ -824,7 +825,7 @@ Table of Contents Category (String) [PLEN octets] *Category* - Name of the TAS movie run category (example: "Any %", "100%", "No + Name of the TAS movie run category (example: "any%", "100%", "No Warps"). *PLEN* @@ -843,7 +844,8 @@ Table of Contents *Name* Name of the emulator used to play the TAS movie while dumping - controller inputs (example: "FCEUX", "Bizhawk"). + controller inputs (example: "FCEUX", "Bizhawk"). The emulator's + version or core name SHOULD NOT be included. *PLEN* Length of the packet payload. @@ -969,7 +971,7 @@ Table of Contents Link (String) [PLEN octets] *Link* - URL that points to the TAS movie or submission (example: + URL that points to the TAS movie file (example: "https://tasvideos.org/4567M"). *PLEN* @@ -987,11 +989,13 @@ Table of Contents Frames (Signed Integer) [2 octets] *Frames* - Number of blank frames (inputs where no buttons are being pressed) - needed at the beginning of a TAS console replay of the TAS movie. - If *Frames* is a negative value, the value of *Frames* amount of - inputs of the TAS console replay of the TAS movie should be - removed. + Number of blank frames (of input where no buttons are being + pressed) needed at the beginning of a TAS replay. If *Frames* is + a negative value, the value of *Frames* indicates the number of + frames that should be skipped from the TAS input data. A negative + value is not applicable if there is no way to determine how much + input data should be skipped (e.g. NES with INPUT_CHUNKs where + each input represents a single latch). 4.3.1.17. VERIFIED Packet @@ -1082,7 +1086,7 @@ Table of Contents GAME_IDENTIFIER packets MUST be in the following format: - 0 1 2 3... 3+NLEN... + 0 1 2 3... 3+NLEN... +----------+--------------+----------+==========+================+ | Type (A) | Encoding (A) | NLEN (N) | Name (S) | Identifier (A) | +----------+--------------+----------+==========+================+ @@ -1105,28 +1109,30 @@ Table of Contents [FF] - Other Encoding (Binary Data): [1 octet] [01] - Raw Binary - [02] - Case Insensitive Base 16 (Hex) - RFC 4648 - [03] - Case Insensitive Base 32 - RFC 4648 - [04] - Base 64 - RFC 4648 - [FF] - Other + [02] - Base 16 (Case Insensitive) + [03] - Base 32 (Case Insensitive) + [04] - Base 64 NLEN (Unsigned Integer) [1 octet] Name (String) [NLEN octets] Identifier (Binary Data) [PLEN - 2 octets] *Type* - Hash, checksum, or identifier algorithm *Identifier* is using. + Hash, checksum, or identifier algorithm used to create the + *Identifier*. *Encoding* - Describes the data encoding of *Identifier*. + Describes the data encoding of *Identifier*. Raw binary indicates + no encoding is used. Base16/32/64 all use the standard RFC 4648 + encodings, without extensions. Base 16 and Base 32 are case- + insensitive. *NLEN* Length of *Name* *Name* - Name of *Type* meant if the hash, checksum, or identifier - algorithm *Identifier* is using is not included in *Type*. If - *Type* is [FF], *Name* SHOULD NOT be empty (0 octet length - string). + Name of the hash, checksum, or identifier algorithm used to create + the *Identifier*. If *Type* is not [FF], *Name* SHOULD be empty (0 + octet length binary data). *Identifier* Game hash, checksum, or identifier data. @@ -1406,7 +1412,7 @@ Table of Contents *Inputs* Controller input data for controller on *Port*. Input values are usually in native format (usually active-low). Input formats for - specific controller types are described in (Section 5). + specific controller types are described in Section 5. *PLEN* Length of the packet payload. @@ -1419,6 +1425,12 @@ Table of Contents are earlier in the *TASD* file and later inputs in the TAS movie console replay are later in the *TASD* file. + The input data contained in *Inputs* is divided up based on the + PORT_CONTROLLER type corresponding to the *Port* number. Refer to + Section 5 for each available type and the number of bytes used for + each instance of controller input. Keep in mind that the + PORT_CONTROLLER type can be changed using TRANSITION packets. + 4.3.5.2. INPUT_MOMENT Packet INPUT_MOMENT packets MUST be in the following format: @@ -1454,11 +1466,17 @@ Table of Contents *Inputs* Controller input data for controller on *Port*. Input values are usually in native format (usually active-low). Input formats for - specific controller types are described in (Section 5). + specific controller types are described in Section 5. *PLEN* Length of the packet payload. + The input data contained in *Inputs* is divided up based on the + PORT_CONTROLLER type corresponding to the *Port* number. Refer to + Section 5 for each available type and the number of bytes used for + each instance of controller input. Keep in mind that the + PORT_CONTROLLER type can be changed using TRANSITION packets. + 4.3.5.3. TRANSITION Packet TRANSITION packets MUST be in the following format: @@ -1531,6 +1549,9 @@ Table of Contents *Count* Number of Lag Frames in a row starting from *Movie Frame*. + Emulators typically consider a "lag frame" to be any frame in which + the emulator believes the game does not poll/read controller inputs. + 4.3.5.5. MOVIE_TRANSITION MOVIE_TRANSITION packets MUST be in the following format: @@ -1614,7 +1635,7 @@ Table of Contents *Unspecified Data* Arbitrary data. Can be used for any data. Because this is - unspecified data, there there is no guarantee any software to + unspecified data, there is no guarantee any software used to control a TAS replay device will support data in this packet type. *PLEN* -- cgit v1.2.3