hltas

Reading and writing Half-Life TAS scripts (`.hltas`).


Keywords
tas, goldsource, half-life, hltas, parser
Licenses
MIT/Apache-2.0

Documentation

hltas

crates.io Documentation

CHANGELOG

A crate for reading and writing Half-Life TAS scripts (.hltas).

Examples

use hltas::{HLTAS, types::{JumpBug, Line, Times}};

let contents = "\
version 1
demo test
frames
------b---|------|------|0.001|-|-|5";

match HLTAS::from_str(&contents) {
    Ok(hltas) => {
        assert_eq!(hltas.properties.demo.as_deref(), Some("test"));

        if let Line::FrameBulk(frame_bulk) = &hltas.lines[0] {
            assert_eq!(
                frame_bulk.auto_actions.jump_bug,
                Some(JumpBug { times: Times::UnlimitedWithinFrameBulk })
            );
            assert_eq!(&frame_bulk.frame_time, "0.001");
            assert_eq!(frame_bulk.frame_count.get(), 5);
        } else {
            unreachable!()
        }
    }

    // The errors are pretty-printed with context.
    Err(error) => println!("{}", error),
}

Features

  • serde1: implements serde's Serialize and Deserialize traits for all types.

  • proptest1: implements proptest's Arbitrary trait for all types. Only "valid" contents are generated, as in, writing to string and parsing back will work and give you the same result.

C++ Wrapper

Also included is a C++ wrapper, exporting the same C++ interface as the previous C++ version of HLTAS.

Using the C++ wrapper from CMake

  • You will need Rust: either from your distribution's packages, or from rustup.
  • From your project's CMakeLists.txt, call add_subdirectory("path/to/hltas").
  • Link to the hltas-cpp target: target_link_libraries(your-target hltas-cpp).

License: MIT/Apache-2.0