diff --git a/resources/tests/init_zone.bin b/resources/tests/init_zone.bin new file mode 100644 index 0000000..0c1b5ad Binary files /dev/null and b/resources/tests/init_zone.bin differ diff --git a/src/bin/kawari-world.rs b/src/bin/kawari-world.rs index f854388..9dfb94e 100644 --- a/src/bin/kawari-world.rs +++ b/src/bin/kawari-world.rs @@ -435,6 +435,7 @@ async fn main() { data: IPCStructData::InitZone(InitZone { server_id: WORLD_ID, zone_id: ZONE_ID, + weather_id: 1, ..Default::default() }), }; diff --git a/src/world/init_zone.rs b/src/world/init_zone.rs index ab42c73..dfa45bd 100644 --- a/src/world/init_zone.rs +++ b/src/world/init_zone.rs @@ -11,7 +11,9 @@ pub struct InitZone { pub content_finder_condition_id: u16, pub layer_set_id: u32, pub layout_id: u32, - pub weather_id: u32, + #[br(dbg)] + pub weather_id: u16, + pub unk_really: u16, pub unk_bitmask1: u8, pub unk_bitmask2: u8, pub unk1: u8, @@ -23,7 +25,33 @@ pub struct InitZone { pub unk5: u32, pub unk6: [u32; 4], pub unk7: [u32; 3], + pub unk8_9: [u8; 9], pub position: Position, pub unk8: [u32; 4], pub unk9: u32, } + +#[cfg(test)] +mod tests { + use std::{fs::read, io::Cursor, path::PathBuf}; + + use binrw::BinRead; + + use super::*; + + #[test] + fn read_init_zone() { + let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + d.push("resources/tests/init_zone.bin"); + + let buffer = read(d).unwrap(); + let mut buffer = Cursor::new(&buffer); + + let init_zone = InitZone::read_le(&mut buffer).unwrap(); + assert_eq!(init_zone.zone_id, 182); + assert_eq!(init_zone.weather_id, 2); + assert_eq!(init_zone.position.x, 40.519722); + assert_eq!(init_zone.position.y, 4.0); + assert_eq!(init_zone.position.z, -150.33124); + } +}