use mercs2_engine::wad;
use mercs2_engine::worldutil::find_terrain_blocks;
#[test]
fn spawn_markers_present_in_vz_wad() {
let Some(path) = wad::resolve_vz_wad(None) else {
return eprintln!(
"SKIPPING: no vz.wad discovered. Run `scripts/find-vz-wad.sh --write` or set MERCS2_GAME_DIR."
);
};
let mut w = wad::open(&path).expect("open vz.wad");
let (_low, ls) = find_terrain_blocks(&mut w).expect("find layers_static");
let placements = mercs2_formats::placement::load_placements(&ls).expect("load placements");
let named: std::collections::HashMap<String, [f32; 3]> = placements
.iter()
.filter_map(|p| p.name.as_ref().map(|n| (n.to_ascii_lowercase(), p.pos)))
.collect();
println!(
"{} placements, {} named markers",
placements.len(),
named.len()
);
for cand in ["pmccon001_start1", "pmc_entry1", "pmc_start1"] {
match named.get(cand) {
Some(p) => println!(" CANDIDATE '{cand}' -> ({:.1}, {:.1}, {:.1})", p[0], p[1], p[2]),
None => println!(" CANDIDATE '{cand}' -> MISSING"),
}
}
assert!(
named.contains_key("pmccon001_start1"),
"PmcCon001_Start1 must resolve from block-29 data (parse_name_records flag-byte fix)"
);
assert!(named.contains_key("pmc_entry1"), "Pmc_Entry1 (HQ entrance) must resolve from block-29 data");
let mut spawnish: Vec<(&String, &[f32; 3])> = named
.iter()
.filter(|(k, _)| {
k.contains("start") || k.contains("entry") || k.contains("spawn") || k.starts_with("pmc")
})
.map(|(k, v)| (k, v))
.collect();
spawnish.sort_by(|a, b| a.0.cmp(b.0));
println!("\nspawn-ish markers ({}):", spawnish.len());
for (name, p) in spawnish.iter().take(60) {
println!(" {name:40} ({:.1}, {:.1}, {:.1})", p[0], p[1], p[2]);
}
}