#quake #parser

no-std quake-map

Parser for Quake and Quake II .map files

3 unstable releases

0.6.1 Mar 2, 2026
0.6.0 Mar 2, 2026
0.5.2 Feb 28, 2026
0.5.1 Feb 28, 2026
0.5.0 Feb 28, 2026

#6 in #quake

Download history 48/week @ 2026-03-12 33/week @ 2026-03-19 86/week @ 2026-03-26 23/week @ 2026-04-02 57/week @ 2026-04-09 55/week @ 2026-04-16 72/week @ 2026-04-23 3/week @ 2026-04-30 11/week @ 2026-05-07

144 downloads per month
Used in bevy_trenchbroom

CC0-1.0 OR MIT OR Apache-2.0

60KB
2K SLoC

About

Library for parsing and writing Quake I and Quake II .map files.

Author

Seth "4LT" Rader

License

CC0 or MIT or Apache-2.0, your choice.

Additional Credits

  • ad_heresp2.map - "Imhotep's Legacy"
    • Map by Heresy, used here for macro-benchmarking

lib.rs:

Quake source map data structures, parsing, and writing

Example

#
#
#
#
use quake_map::{Entity, WriteError, TextParseError};

let mut map = quake_map::parse(&mut source).map_err(|err| match err {
    TextParseError::Io(_) => String::from("Failed to read map"),
    l_err@TextParseError::Lexer(_) => l_err.to_string(),
    p_err@TextParseError::Parser(_) => p_err.to_string(),
})?;

let mut soldier = Entity::new();

soldier.edict.push((
    CString::new("classname").unwrap(),
    CString::new("monster_army").unwrap(),
));

soldier.edict.push((
    CString::new("origin").unwrap(),
    CString::new("128 -256 24").unwrap(),
));

map.entities.push(soldier);

map.write_to(&mut dest).map_err(|err| match err {
    WriteError::Io(e) => e.to_string(),
    WriteError::Validation(msg) => msg
})?;

No runtime deps