re: three probes for the parsed record all miss -- hypothesis: there is not one
Searched RAM for HP 25000 (200+ hits, too common), for the rare float AttackVesselPoint 0.08 (64 hits, no window holds the unit's other values, one hit is a code constant), and for the ID string itself (two copies, each pointed at from -0x10, but the surrounding 256 words hold none of the numbers because that region is the IDXD string pool where values are ASCII). Hypothesis recorded as 🟡: IDXD is reflective and the engine likely reads values from the pool by key on demand, caching only the per-frame ones -- which is exactly what the 0x820af844 object contains at any dump depth. If so, a defaulted field has no value anywhere in data and the default is applied by code at read time, so Route B for the Ratio/Count family needs the read path or the static DuckDB route, not more scanning. The 13 Size_Y values worked because Size_Y is one of the cached fields. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
22
crates/sylpheed-formats/examples/unit_values.rs
Normal file
22
crates/sylpheed-formats/examples/unit_values.rs
Normal file
@@ -0,0 +1,22 @@
|
||||
use sylpheed_formats::idxd::IdxdObject;
|
||||
use sylpheed_formats::pak::PakArchive;
|
||||
fn main() {
|
||||
let disc = std::env::args().nth(1).unwrap();
|
||||
let want = std::env::args().nth(2).unwrap();
|
||||
let pak = PakArchive::open(format!("{disc}/dat/GP_MAIN_GAME_E.pak")).unwrap();
|
||||
for e in pak.entries() {
|
||||
let Ok(b) = pak.read(e) else { continue };
|
||||
let Ok(o) = IdxdObject::parse(&b) else { continue };
|
||||
let Some(id) = o.get_raw("ID") else { continue };
|
||||
if !id.contains(&want) { continue; }
|
||||
println!("=== {id}");
|
||||
let mut seen = std::collections::BTreeSet::new();
|
||||
for k in o.tokens() {
|
||||
if let Some(v) = o.get_f32(k) {
|
||||
if v != 0.0 && seen.insert(k.clone()) {
|
||||
println!(" {:<28} {:<12} 0x{:08x}", k, v, v.to_bits());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user