use sylpheed_formats::{game_data as gd, PakArchive}; fn main() { let disc = std::env::var("SYLPHEED_DISC").unwrap(); let pak = PakArchive::open(format!("{disc}/dat/GP_MAIN_GAME_E.pak")).unwrap(); let units = gd::load_units(&pak); let vessels = gd::load_vessels(&pak); let hp = |id: &str| -> String { units .iter() .find(|u| u.id.as_deref() == Some(id)) .and_then(|u| u.hp) .map(|h| format!("{h:.0}hp")) .or_else(|| { vessels .iter() .find(|v| v.id.as_deref() == Some(id)) .and_then(|v| v.hp) .map(|h| format!("{h:.0}HP")) }) .unwrap_or("·".into()) }; let rosters = gd::load_unit_rosters(&pak); for r in rosters.iter().filter(|r| r.stage.is_some()).take(4) { println!( "\n{} — {} combatants:", r.stage.as_deref().unwrap(), r.units.len() ); for u in r.units.iter().filter(|u| u.contains("ADAN")).take(6) { let short = u .trim_start_matches("UN_") .split('_') .skip(1) .collect::>() .join("_"); println!(" {short:32} {}", hp(u)); } } }