#map #valve #source #vmf #parser

vmf-forge

A parser for Valve Map Format (VMF) files

1 unstable release

0.1.0 Dec 31, 2024

#789 in Parser implementations

Download history 66/week @ 2024-12-25 48/week @ 2025-01-01 7/week @ 2025-01-08

121 downloads per month

MIT license

81KB
1.5K SLoC

vmf-forge

Crates.io Docs.rs

vmf-forge is a Rust library for parsing, manipulating, and serializing Valve Map Format (VMF) files used in Source Engine games. This project is currently work in progress.

Features

  • Parses VMF files into convenient Rust data structures.
  • Allows modification of VMF data.
  • Serializes the modified data back into a VMF file.

Installation

Add vmf-forge to your Cargo.toml:

[dependencies]
vmf-forge = "0.1.0"

Usage Example

use vmf_forge::prelude::*;
use std::fs::File;

fn main() -> Result<(), VmfError> {
    let mut file = File::open("your_map.vmf")?;
    let vmf_file = VmfFile::parse_file(&mut file)?;

    // Access and modify the VMF data
    println!("Map Version: {}", vmf_file.versioninfo.map_version);

    // Find info_player_start entity
    if let Some(player_start) = vmf_file.entities.find_by_classname("info_player_start").next() {
       println!("Found player start: {:?}", player_start);
   }

    // Add a new entity
    let mut new_entity = Entity::default();
    new_entity.key_values.insert("classname".to_string(), "prop_static".to_string());
    new_entity.key_values.insert("model".to_string(), "models/props_foliage/urban_tree001a.mdl".to_string());
    new_entity.key_values.insert("origin".to_string(), "0 0 0".to_string());
    vmf_file.entities.push(new_entity);

    // Save the modified VMF file
    vmf_file.save("modified_map.vmf")?;

    Ok(())
}

Known Issues

  • Entity connections are not yet fully supported. The parsing and serialization of connections might produce incorrect results.

Contributing

Contributions are welcome! Please feel free to open issues or submit pull requests.

License

vmf-forge is distributed under the terms of either the MIT license.

Dependencies

~3–4.5MB
~84K SLoC