//! Which `GP_TITLE` elements does the resting-pose dwell fallback decide, and does //! it hand back a visible pose? The disc-wide census says 5 fires / 4 visible here. //! cargo run -p sylpheed-formats --example rest_fallback_title use sylpheed_formats::{pak::PakArchive, ui_layout}; use std::path::PathBuf; fn main() { let root = PathBuf::from(std::env::var("SYLPHEED_DISC").expect("SYLPHEED_DISC")); let ar = PakArchive::open(root.join("dat/GP_TITLE.pak")).expect("GP_TITLE"); for (i, e) in ar.entries().iter().enumerate() { let Ok(by) = ar.read(e) else { continue }; let Some(b) = ui_layout::parse_build(&by) else { continue }; for el in &b.elements { if el.keyframes.len() < 2 { continue } if el.keyframes.windows(2).any(|w| w[0].x == w[1].x && w[0].y == w[1].y && w[0].scale_x == w[1].scale_x && w[0].scale_y == w[1].scale_y && w[0].fade == w[1].fade) { continue } let Some(r) = el.rest() else { continue }; let a = (r.fade >> 24) & 0xff; let ks: Vec = el.keyframes.iter() .map(|k| format!("{}:a{}", k.time.map(|v| v.to_string()).unwrap_or("-".into()), (k.fade >> 24) & 0xff)) .collect(); println!("entry {i:2} {:24} rest a={a:3} t={:?} [{}]{}", el.name, r.time, ks.join(" "), if a > 0 { " <== VISIBLE" } else { "" }); } } }