From 56929bac9ff5e20762de821997c281dde16eeb2b Mon Sep 17 00:00:00 2001 From: Nick Condron Date: Sun, 3 Mar 2024 14:56:54 -0500 Subject: [PATCH] Add support for v3.16 (#66) Co-authored-by: melkor --- gen/resources/frames.json | 10 ++++- src/frame/immutable/mod.rs | 9 ++++ src/frame/immutable/peppi.rs | 48 +++++++++++++++++++-- src/frame/immutable/slippi.rs | 24 +++++++++-- src/frame/mutable.rs | 44 ++++++++++++++++--- src/frame/transpose.rs | 3 ++ src/io/slippi/mod.rs | 2 +- tests/data/v3.16.slp | Bin 0 -> 168259 bytes tests/peppi.rs | 79 +++++++++++++++++++++++++++++++++- 9 files changed, 201 insertions(+), 18 deletions(-) create mode 100644 tests/data/v3.16.slp diff --git a/gen/resources/frames.json b/gen/resources/frames.json index b58f27a..a659e83 100644 --- a/gen/resources/frames.json +++ b/gen/resources/frames.json @@ -75,7 +75,11 @@ { "name": "hitlag", "type": "f32", "version": "3.8" }, { "name": "animation_index", "type": "u32", - "version": "3.11" } + "version": "3.11" }, + { "name": "last_hit_by_instance", "type": "u16", + "version": "3.16" }, + { "name": "instance_id", "type": "u16", + "version": "3.16" } ], "Start": [ { "name": "random_seed", "type": "u32" }, @@ -104,6 +108,8 @@ { "name": "misc", "type": "ItemMisc", "version": "3.2" }, { "name": "owner", "type": "i8", - "version": "3.6" } + "version": "3.6" }, + { "name": "instance_id", "type": "u16", + "version": "3.16" } ] } diff --git a/src/frame/immutable/mod.rs b/src/frame/immutable/mod.rs index 9fdf9db..287cdf8 100644 --- a/src/frame/immutable/mod.rs +++ b/src/frame/immutable/mod.rs @@ -191,6 +191,7 @@ pub struct Item { pub id: PrimitiveArray, pub misc: Option, pub owner: Option>, + pub instance_id: Option>, pub validity: Option, } @@ -207,6 +208,7 @@ impl Item { id: self.id.values()[i], misc: self.misc.as_ref().map(|x| x.transpose_one(i, version)), owner: self.owner.as_ref().map(|x| x.values()[i]), + instance_id: self.instance_id.as_ref().map(|x| x.values()[i]), } } } @@ -224,6 +226,7 @@ impl From for Item { id: x.id.into(), misc: x.misc.map(|x| x.into()), owner: x.owner.map(|x| x.into()), + instance_id: x.instance_id.map(|x| x.into()), validity: x.validity.map(|v| v.into()), } } @@ -303,6 +306,8 @@ pub struct Post { pub velocities: Option, pub hitlag: Option>, pub animation_index: Option>, + pub last_hit_by_instance: Option>, + pub instance_id: Option>, pub validity: Option, } @@ -336,6 +341,8 @@ impl Post { .map(|x| x.transpose_one(i, version)), hitlag: self.hitlag.as_ref().map(|x| x.values()[i]), animation_index: self.animation_index.as_ref().map(|x| x.values()[i]), + last_hit_by_instance: self.last_hit_by_instance.as_ref().map(|x| x.values()[i]), + instance_id: self.instance_id.as_ref().map(|x| x.values()[i]), } } } @@ -364,6 +371,8 @@ impl From for Post { velocities: x.velocities.map(|x| x.into()), hitlag: x.hitlag.map(|x| x.into()), animation_index: x.animation_index.map(|x| x.into()), + last_hit_by_instance: x.last_hit_by_instance.map(|x| x.into()), + instance_id: x.instance_id.map(|x| x.into()), validity: x.validity.map(|v| v.into()), } } diff --git a/src/frame/immutable/peppi.rs b/src/frame/immutable/peppi.rs index f91ae56..e909da9 100644 --- a/src/frame/immutable/peppi.rs +++ b/src/frame/immutable/peppi.rs @@ -308,7 +308,10 @@ impl Item { if version.gte(3, 2) { fields.push(Field::new("misc", ItemMisc::data_type(version), false)); if version.gte(3, 6) { - fields.push(Field::new("owner", DataType::Int8, false)) + fields.push(Field::new("owner", DataType::Int8, false)); + if version.gte(3, 16) { + fields.push(Field::new("instance_id", DataType::UInt16, false)) + } } } }; @@ -328,7 +331,10 @@ impl Item { if version.gte(3, 2) { values.push(self.misc.unwrap().into_struct_array(version).boxed()); if version.gte(3, 6) { - values.push(self.owner.unwrap().boxed()) + values.push(self.owner.unwrap().boxed()); + if version.gte(3, 16) { + values.push(self.instance_id.unwrap().boxed()) + } } }; StructArray::new(Self::data_type(version), values, self.validity) @@ -395,6 +401,12 @@ impl Item { .unwrap() .clone() }), + instance_id: values.get(10).map(|x| { + x.as_any() + .downcast_ref::>() + .unwrap() + .clone() + }), validity: validity, } } @@ -531,7 +543,19 @@ impl Post { "animation_index", DataType::UInt32, false, - )) + )); + if version.gte(3, 16) { + fields.push(Field::new( + "last_hit_by_instance", + DataType::UInt16, + false, + )); + fields.push(Field::new( + "instance_id", + DataType::UInt16, + false, + )) + } } } } @@ -570,7 +594,11 @@ impl Post { if version.gte(3, 8) { values.push(self.hitlag.unwrap().boxed()); if version.gte(3, 11) { - values.push(self.animation_index.unwrap().boxed()) + values.push(self.animation_index.unwrap().boxed()); + if version.gte(3, 16) { + values.push(self.last_hit_by_instance.unwrap().boxed()); + values.push(self.instance_id.unwrap().boxed()) + } } } } @@ -702,6 +730,18 @@ impl Post { .unwrap() .clone() }), + last_hit_by_instance: values.get(21).map(|x| { + x.as_any() + .downcast_ref::>() + .unwrap() + .clone() + }), + instance_id: values.get(22).map(|x| { + x.as_any() + .downcast_ref::>() + .unwrap() + .clone() + }), validity: validity, } } diff --git a/src/frame/immutable/slippi.rs b/src/frame/immutable/slippi.rs index c13e8b9..9e0f2a4 100644 --- a/src/frame/immutable/slippi.rs +++ b/src/frame/immutable/slippi.rs @@ -201,7 +201,10 @@ impl Item { if version.gte(3, 2) { self.misc.as_ref().unwrap().write(w, version, i)?; if version.gte(3, 6) { - w.write_i8(self.owner.as_ref().unwrap().value(i))? + w.write_i8(self.owner.as_ref().unwrap().value(i))?; + if version.gte(3, 16) { + w.write_u16::(self.instance_id.as_ref().unwrap().value(i))? + } } }; Ok(()) @@ -220,7 +223,10 @@ impl Item { if version.gte(3, 2) { size += ItemMisc::size(version); if version.gte(3, 6) { - size += size_of::() + size += size_of::(); + if version.gte(3, 16) { + size += size_of::() + } } }; size @@ -295,7 +301,13 @@ impl Post { if version.gte(3, 8) { w.write_f32::(self.hitlag.as_ref().unwrap().value(i))?; if version.gte(3, 11) { - w.write_u32::(self.animation_index.as_ref().unwrap().value(i))? + w.write_u32::(self.animation_index.as_ref().unwrap().value(i))?; + if version.gte(3, 16) { + w.write_u16::( + self.last_hit_by_instance.as_ref().unwrap().value(i), + )?; + w.write_u16::(self.instance_id.as_ref().unwrap().value(i))? + } } } } @@ -333,7 +345,11 @@ impl Post { if version.gte(3, 8) { size += size_of::(); if version.gte(3, 11) { - size += size_of::() + size += size_of::(); + if version.gte(3, 16) { + size += size_of::(); + size += size_of::() + } } } } diff --git a/src/frame/mutable.rs b/src/frame/mutable.rs index fb7c0c6..6c40bba 100644 --- a/src/frame/mutable.rs +++ b/src/frame/mutable.rs @@ -206,6 +206,7 @@ pub struct Item { pub id: MutablePrimitiveArray, pub misc: Option, pub owner: Option>, + pub instance_id: Option>, pub validity: Option, } @@ -226,6 +227,9 @@ impl Item { owner: version .gte(3, 6) .then(|| MutablePrimitiveArray::::with_capacity(capacity)), + instance_id: version + .gte(3, 16) + .then(|| MutablePrimitiveArray::::with_capacity(capacity)), validity: None, } } @@ -250,7 +254,10 @@ impl Item { if version.gte(3, 2) { self.misc.as_mut().unwrap().push_null(version); if version.gte(3, 6) { - self.owner.as_mut().unwrap().push_null() + self.owner.as_mut().unwrap().push_null(); + if version.gte(3, 16) { + self.instance_id.as_mut().unwrap().push_null() + } } } } @@ -268,7 +275,11 @@ impl Item { self.misc.as_mut().unwrap().read_push(r, version)?; if version.gte(3, 6) { r.read_i8() - .map(|x| self.owner.as_mut().unwrap().push(Some(x)))? + .map(|x| self.owner.as_mut().unwrap().push(Some(x)))?; + if version.gte(3, 16) { + r.read_u16::() + .map(|x| self.instance_id.as_mut().unwrap().push(Some(x)))? + } } }; self.validity.as_mut().map(|v| v.push(true)); @@ -287,6 +298,7 @@ impl Item { id: self.id.values()[i], misc: self.misc.as_ref().map(|x| x.transpose_one(i, version)), owner: self.owner.as_ref().map(|x| x.values()[i]), + instance_id: self.instance_id.as_ref().map(|x| x.values()[i]), } } } @@ -402,6 +414,8 @@ pub struct Post { pub velocities: Option, pub hitlag: Option>, pub animation_index: Option>, + pub last_hit_by_instance: Option>, + pub instance_id: Option>, pub validity: Option, } @@ -451,6 +465,12 @@ impl Post { animation_index: version .gte(3, 11) .then(|| MutablePrimitiveArray::::with_capacity(capacity)), + last_hit_by_instance: version + .gte(3, 16) + .then(|| MutablePrimitiveArray::::with_capacity(capacity)), + instance_id: version + .gte(3, 16) + .then(|| MutablePrimitiveArray::::with_capacity(capacity)), validity: None, } } @@ -490,7 +510,11 @@ impl Post { if version.gte(3, 8) { self.hitlag.as_mut().unwrap().push_null(); if version.gte(3, 11) { - self.animation_index.as_mut().unwrap().push_null() + self.animation_index.as_mut().unwrap().push_null(); + if version.gte(3, 16) { + self.last_hit_by_instance.as_mut().unwrap().push_null(); + self.instance_id.as_mut().unwrap().push_null() + } } } } @@ -534,8 +558,16 @@ impl Post { r.read_f32::() .map(|x| self.hitlag.as_mut().unwrap().push(Some(x)))?; if version.gte(3, 11) { - r.read_u32::() - .map(|x| self.animation_index.as_mut().unwrap().push(Some(x)))? + r.read_u32::().map(|x| { + self.animation_index.as_mut().unwrap().push(Some(x)) + })?; + if version.gte(3, 16) { + r.read_u16::().map(|x| { + self.last_hit_by_instance.as_mut().unwrap().push(Some(x)) + })?; + r.read_u16::() + .map(|x| self.instance_id.as_mut().unwrap().push(Some(x)))? + } } } } @@ -575,6 +607,8 @@ impl Post { .map(|x| x.transpose_one(i, version)), hitlag: self.hitlag.as_ref().map(|x| x.values()[i]), animation_index: self.animation_index.as_ref().map(|x| x.values()[i]), + last_hit_by_instance: self.last_hit_by_instance.as_ref().map(|x| x.values()[i]), + instance_id: self.instance_id.as_ref().map(|x| x.values()[i]), } } } diff --git a/src/frame/transpose.rs b/src/frame/transpose.rs index cc4857e..b0c3df8 100644 --- a/src/frame/transpose.rs +++ b/src/frame/transpose.rs @@ -41,6 +41,7 @@ pub struct Item { pub id: u32, pub misc: Option, pub owner: Option, + pub instance_id: Option, } #[derive(PartialEq, Clone, Copy, Debug, Default)] @@ -75,6 +76,8 @@ pub struct Post { pub velocities: Option, pub hitlag: Option, pub animation_index: Option, + pub last_hit_by_instance: Option, + pub instance_id: Option, } #[derive(PartialEq, Clone, Copy, Debug, Default)] diff --git a/src/io/slippi/mod.rs b/src/io/slippi/mod.rs index ba780ac..0dcce05 100644 --- a/src/io/slippi/mod.rs +++ b/src/io/slippi/mod.rs @@ -12,7 +12,7 @@ pub use ser::write; /// We can read replays with higher versions than this, but that discards information. /// We don't support writing these replays as a result, though this restriction may be /// relaxed in the future. -pub const MAX_SUPPORTED_VERSION: Version = Version(3, 15, 0); +pub const MAX_SUPPORTED_VERSION: Version = Version(3, 16, 0); /// Every .slp file will start with a UBJSON opening brace, `raw` key & type: "{U\x03raw[$U#l" pub const FILE_SIGNATURE: [u8; 11] = [ diff --git a/tests/data/v3.16.slp b/tests/data/v3.16.slp new file mode 100644 index 0000000000000000000000000000000000000000..794f04c2453c1b41e6a9989a6e099a8449f7883d GIT binary patch literal 168259 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 literal 0 HcmV?d00001 diff --git a/tests/peppi.rs b/tests/peppi.rs index b420605..ad3083a 100644 --- a/tests/peppi.rs +++ b/tests/peppi.rs @@ -1,4 +1,4 @@ -use std::{fs, io::Cursor, path::Path}; +use std::{collections::HashSet, fs, io::Cursor, path::Path}; use pretty_assertions::assert_eq; use serde_json::json; @@ -11,7 +11,7 @@ use peppi::{ Rollbacks, }, game::{ - immutable::Game, shift_jis::MeleeString, Bytes, DashBack, End, EndMethod, Language, + immutable::Game, shift_jis::MeleeString, Bytes, DashBack, End, EndMethod, Language, Match, Netplay, Player, PlayerEnd, PlayerType, Port, Scene, ShieldDrop, Start, Ucf, }, io::{ @@ -659,6 +659,78 @@ fn v3_13() { ); } +#[test] +fn v3_14() { + let game = game("v3.16"); + assert_eq!( + game.start.r#match, + Some(Match { + id: String::from("mode.unranked-2024-02-15T14:37:23.22-0"), + game: 1, + tiebreaker: 0 + }) + ) +} + +#[test] +fn v3_15() { + let game = game("v3.16"); + assert_eq!( + game.frames + .transpose_one(200, game.start.slippi.version) + .ports[0] + .leader + .pre + .raw_analog_y, + Some(-21) + ) +} + +#[test] +fn v3_16() { + let game = game("v3.16"); + let player1_ids = game.frames.ports[0] + .leader + .post + .instance_id + .as_ref() + .unwrap(); + let player2_ids = game.frames.ports[1] + .leader + .post + .instance_id + .as_ref() + .unwrap(); + let mut id_set: HashSet = player1_ids.values_iter().cloned().collect(); + id_set.remove(&0); + + // player1 and player2 ids should not share any instance ids + assert!(player2_ids.values_iter().all(|id| !id_set.contains(id))); + + let player2_hit_bys = game.frames.ports[1] + .leader + .post + .last_hit_by_instance + .as_ref() + .unwrap(); + + // player2 should be hit by player1 ids + assert!(player2_hit_bys + .values_iter() + .all(|id| *id == 0 || id_set.contains(id))); + + let items = game.frames.item.as_ref().unwrap(); + let item_instance_ids = items.instance_id.as_ref().unwrap(); + let item_types = &items.r#type; + + // Shy guy (210) should have instance id of 0 + // The laser/gun should share instance id with the Fox player (P1) + assert!(item_instance_ids + .values_iter() + .zip(item_types.values_iter()) + .all(|(&id, &r#type)| (r#type == 210 && id == 0) || id_set.contains(&id))); +} + #[test] fn unknown_event() { // shouldn't panic @@ -701,6 +773,7 @@ fn items() { velocity: transpose::Velocity { x: 0.0, y: 0.0 }, misc: Some(transpose::ItemMisc(5, 5, 5, 5)), owner: Some(0), + instance_id: None, }]) ); assert_eq!( @@ -721,6 +794,7 @@ fn items() { velocity: transpose::Velocity { x: 0.0, y: 0.0 }, misc: Some(transpose::ItemMisc(5, 0, 5, 5)), owner: Some(0), + instance_id: None, }]) ); assert_eq!( @@ -741,6 +815,7 @@ fn items() { velocity: transpose::Velocity { x: 0.0, y: 0.0 }, misc: Some(transpose::ItemMisc(5, 0, 5, 5)), owner: Some(0), + instance_id: None, }]) ); }