openstranded-map-tool 0.2.1

Convert Stranded II .s2 map files to .osmap (OpenStranded MAP) format
Documentation
use openstranded_map_tool::{parse_s2, s2_to_osmap};
use std::fs;
fn main() {
    // Map01: terrain_size=16, step=4
    let data = fs::read("/home/admen/sources/projects/openstranded/s2mod-tool/tests/stranded2/maps/adventure/map01.s2").unwrap();
    let s2 = parse_s2(&data).unwrap();
    let osmap = s2_to_osmap(s2, "map01.s2");
    println!("=== MAP01 ===");
    println!("terrain_size: {}", osmap.terrain.size);
    println!("entities: {}", osmap.entities.len());
    if let Some(ref sp) = osmap.player_spawn {
        println!("player spawn: ({:.4}, {:.4}, {:.4})", sp.position.0, sp.position.1, sp.position.2);
    }
    for e in &osmap.entities {
        println!("  {} id={} typ={} pos=({:.4}, {:.4}, {:.4})", e.class, e.id, e.type_id, e.position.0, e.position.1, e.position.2);
    }
    
    // Map02: terrain_size=64, step=1
    let data2 = fs::read("/home/admen/sources/projects/openstranded/s2mod-tool/tests/stranded2/maps/adventure/map02.s2").unwrap();
    let s22 = parse_s2(&data2).unwrap();
    let osmap2 = s2_to_osmap(s22, "map02.s2");
    println!("\n=== MAP02 ===");
    println!("terrain_size: {}", osmap2.terrain.size);
    println!("entities: {}", osmap2.entities.len());
    if let Some(ref sp) = osmap2.player_spawn {
        println!("player spawn: ({:.4}, {:.4}, {:.4})", sp.position.0, sp.position.1, sp.position.2);
    }
    // Show first 5 entities
    for e in osmap2.entities.iter().take(5) {
        println!("  {} id={} typ={} pos=({:.4}, {:.4}, {:.4})", e.class, e.id, e.type_id, e.position.0, e.position.1, e.position.2);
    }
    // Show entity XZ range
    if !osmap2.entities.is_empty() {
        let xs: Vec<f32> = osmap2.entities.iter().map(|e| e.position.0).collect();
        let zs: Vec<f32> = osmap2.entities.iter().map(|e| e.position.2).collect();
        println!("  osmap x range: {:.2} .. {:.2}", xs.iter().copied().fold(f32::MAX, f32::min), xs.iter().copied().fold(f32::MIN, f32::max));
        println!("  osmap z range: {:.2} .. {:.2}", zs.iter().copied().fold(f32::MAX, f32::min), zs.iter().copied().fold(f32::MIN, f32::max));
    }
}