packages feed

rattletrap 11.0.1 → 11.1.0

raw patch · 8 files changed

+108/−4 lines, 8 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Rattletrap.Type.Attribute.PickupInfo: PickupInfo :: Bool -> Bool -> U32 -> I32 -> I32 -> Bool -> Bool -> PickupInfo
+ Rattletrap.Type.Attribute.PickupInfo: [unknown1] :: PickupInfo -> Bool
+ Rattletrap.Type.Attribute.PickupInfo: [unknown2] :: PickupInfo -> Bool
+ Rattletrap.Type.Attribute.PickupInfo: [unknown3] :: PickupInfo -> U32
+ Rattletrap.Type.Attribute.PickupInfo: [unknown4] :: PickupInfo -> I32
+ Rattletrap.Type.Attribute.PickupInfo: [unknown5] :: PickupInfo -> I32
+ Rattletrap.Type.Attribute.PickupInfo: [unknown6] :: PickupInfo -> Bool
+ Rattletrap.Type.Attribute.PickupInfo: [unknown7] :: PickupInfo -> Bool
+ Rattletrap.Type.Attribute.PickupInfo: bitGet :: BitGet PickupInfo
+ Rattletrap.Type.Attribute.PickupInfo: bitPut :: PickupInfo -> BitPut
+ Rattletrap.Type.Attribute.PickupInfo: data PickupInfo
+ Rattletrap.Type.Attribute.PickupInfo: instance Data.Aeson.Types.FromJSON.FromJSON Rattletrap.Type.Attribute.PickupInfo.PickupInfo
+ Rattletrap.Type.Attribute.PickupInfo: instance Data.Aeson.Types.ToJSON.ToJSON Rattletrap.Type.Attribute.PickupInfo.PickupInfo
+ Rattletrap.Type.Attribute.PickupInfo: instance GHC.Classes.Eq Rattletrap.Type.Attribute.PickupInfo.PickupInfo
+ Rattletrap.Type.Attribute.PickupInfo: instance GHC.Show.Show Rattletrap.Type.Attribute.PickupInfo.PickupInfo
+ Rattletrap.Type.Attribute.PickupInfo: schema :: Schema
+ Rattletrap.Type.AttributeType: PickupInfo :: AttributeType
+ Rattletrap.Type.AttributeValue: PickupInfo :: PickupInfo -> AttributeValue

Files

README.markdown view
@@ -10,8 +10,8 @@ can be used to modify replays in order to force everyone into the same car or change the map a game was played on. -Rattletrap supports every version of Rocket League up to [1.92][], which was-released on 2021-02-01. If a replay can be played by the Rocket League client,+Rattletrap supports every version of Rocket League up to [1.95][], which was+released on 2021-04-14. If a replay can be played by the Rocket League client, it can be parsed by Rattletrap. (If not, that's a bug. Please report it!)  Rattletrap is a command-line application. You should only use it if you're@@ -133,7 +133,7 @@ [Docker badge]: https://img.shields.io/docker/v/taylorfausak/rattletrap?label=docker&logo=docker&logoColor=white [docker]: https://hub.docker.com/r/taylorfausak/rattletrap [Rocket League]: https://www.rocketleague.com-[1.92]: https://www.rocketleague.com/news/patch-notes-v1-92/+[1.95]: https://www.rocketleague.com/news/patch-notes-v1-95/ [Ball Chasing]: https://ballchasing.com [Haskell]: https://www.haskell.org [C# parser]: https://github.com/jjbott/RocketLeagueReplayParser
rattletrap.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.0  name: rattletrap-version: 11.0.1+version: 11.1.0 synopsis: Parse and generate Rocket League replays. description: Rattletrap parses and generates Rocket League replays. @@ -91,6 +91,7 @@     Rattletrap.Type.Attribute.MusicStinger     Rattletrap.Type.Attribute.PartyLeader     Rattletrap.Type.Attribute.Pickup+    Rattletrap.Type.Attribute.PickupInfo     Rattletrap.Type.Attribute.PickupNew     Rattletrap.Type.Attribute.PlayerHistoryKey     Rattletrap.Type.Attribute.PrivateMatchSettings
src/lib/Rattletrap/Console/Main.hs view
@@ -39,6 +39,7 @@ import qualified Rattletrap.Type.Attribute.MusicStinger as Attribute.MusicStinger import qualified Rattletrap.Type.Attribute.PartyLeader as Attribute.PartyLeader import qualified Rattletrap.Type.Attribute.Pickup as Attribute.Pickup+import qualified Rattletrap.Type.Attribute.PickupInfo as Attribute.PickupInfo import qualified Rattletrap.Type.Attribute.PickupNew as Attribute.PickupNew import qualified Rattletrap.Type.Attribute.PlayerHistoryKey as Attribute.PlayerHistoryKey import qualified Rattletrap.Type.Attribute.PrivateMatchSettings as Attribute.PrivateMatchSettings@@ -186,6 +187,7 @@         , Attribute.MusicStinger.schema         , Attribute.PartyLeader.schema         , Attribute.Pickup.schema+        , Attribute.PickupInfo.schema         , Attribute.PickupNew.schema         , Attribute.PlayerHistoryKey.schema         , Attribute.PrivateMatchSettings.schema
src/lib/Rattletrap/Data.hs view
@@ -107,6 +107,7 @@   , "TAGame.GameEvent_SoccarSplitscreen_TA"   , "TAGame.GRI_TA"   , "TAGame.MaxTimeWarningData_TA"+  , "TAGame.PickupTimer_TA"   , "TAGame.PRI_TA"   , "TAGame.RumblePickups_TA"   , "TAGame.SpecialPickup_BallCarSpring_TA"@@ -219,6 +220,7 @@   , ("ProjectX.Default__NetModeReplicator_X", "ProjectX.NetModeReplicator")   , ("TAGame.Default__CameraSettingsActor_TA", "TAGame.CameraSettingsActor_TA")   , ("TAGame.Default__MaxTimeWarningData_TA", "TAGame.MaxTimeWarningData_TA")+  , ("TAGame.Default__PickupTimer_TA", "TAGame.PickupTimer_TA")   , ("TAGame.Default__PRI_TA", "TAGame.PRI_TA")   , ("TAGame.Default__RumblePickups_TA", "TAGame.RumblePickups_TA")   , ("TheWorld:PersistentLevel.BreakOutActor_Platform_TA", "TAGame.BreakOutActor_Platform_TA")@@ -392,6 +394,7 @@   , ("TAGame.RBActor_TA:WeldedInfo", AttributeType.WeldedInfo)   , ("TAGame.RumblePickups_TA:AttachedPickup", AttributeType.FlaggedInt)   , ("TAGame.RumblePickups_TA:ConcurrentItemCount", AttributeType.Int)+  , ("TAGame.RumblePickups_TA:PickupInfo", AttributeType.PickupInfo)   , ("TAGame.SpecialPickup_BallFreeze_TA:RepOrigSpeed", AttributeType.Float)   , ("TAGame.SpecialPickup_BallVelcro_TA:AttachTime", AttributeType.Float)   , ("TAGame.SpecialPickup_BallVelcro_TA:bBroken", AttributeType.Boolean)
+ src/lib/Rattletrap/Type/Attribute/PickupInfo.hs view
@@ -0,0 +1,89 @@+module Rattletrap.Type.Attribute.PickupInfo where++import qualified Rattletrap.BitGet as BitGet+import qualified Rattletrap.BitPut as BitPut+import qualified Rattletrap.Schema as Schema+import qualified Rattletrap.Type.I32 as I32+import qualified Rattletrap.Type.U32 as U32+import qualified Rattletrap.Utility.Json as Json++data PickupInfo = PickupInfo+  { unknown1 :: Bool+  , unknown2 :: Bool+  , unknown3 :: U32.U32+  , unknown4 :: I32.I32+  , unknown5 :: I32.I32+  , unknown6 :: Bool+  , unknown7 :: Bool+  }+  deriving (Eq, Show)++instance Json.FromJSON PickupInfo where+  parseJSON = Json.withObject "PickupInfo" $ \object -> do+    unknown1 <- Json.required object "unknown1"+    unknown2 <- Json.required object "unknown2"+    unknown3 <- Json.required object "unknown3"+    unknown4 <- Json.required object "unknown4"+    unknown5 <- Json.required object "unknown5"+    unknown6 <- Json.required object "unknown6"+    unknown7 <- Json.required object "unknown7"+    pure PickupInfo+      { unknown1+      , unknown2+      , unknown3+      , unknown4+      , unknown5+      , unknown6+      , unknown7+      }++instance Json.ToJSON PickupInfo where+  toJSON x = Json.object+    [ Json.pair "unknown1" $ unknown1 x+    , Json.pair "unknown2" $ unknown2 x+    , Json.pair "unknown3" $ unknown3 x+    , Json.pair "unknown4" $ unknown4 x+    , Json.pair "unknown5" $ unknown5 x+    , Json.pair "unknown6" $ unknown6 x+    , Json.pair "unknown7" $ unknown7 x+    ]++schema :: Schema.Schema+schema = Schema.named "pickup-info" $ Schema.object+  [ (Json.pair "unknown1" $ Schema.ref Schema.boolean, True)+  , (Json.pair "unknown2" $ Schema.ref Schema.boolean, True)+  , (Json.pair "unknown3" $ Schema.ref U32.schema, True)+  , (Json.pair "unknown4" $ Schema.ref I32.schema, True)+  , (Json.pair "unknown5" $ Schema.ref I32.schema, True)+  , (Json.pair "unknown6" $ Schema.ref Schema.boolean, True)+  , (Json.pair "unknown7" $ Schema.ref Schema.boolean, True)+  ]++bitPut :: PickupInfo -> BitPut.BitPut+bitPut x =+  BitPut.bool (unknown1 x)+    <> BitPut.bool (unknown2 x)+    <> U32.bitPut (unknown3 x)+    <> I32.bitPut (unknown4 x)+    <> I32.bitPut (unknown5 x)+    <> BitPut.bool (unknown6 x)+    <> BitPut.bool (unknown7 x)++bitGet :: BitGet.BitGet PickupInfo+bitGet = BitGet.label "PickupInfo" $ do+  unknown1 <- BitGet.label "unknown1" BitGet.bool+  unknown2 <- BitGet.label "unknown2" BitGet.bool+  unknown3 <- BitGet.label "unknown3" U32.bitGet+  unknown4 <- BitGet.label "unknown4" I32.bitGet+  unknown5 <- BitGet.label "unknown5" I32.bitGet+  unknown6 <- BitGet.label "unknown6" BitGet.bool+  unknown7 <- BitGet.label "unknown7" BitGet.bool+  pure PickupInfo+    { unknown1+    , unknown2+    , unknown3+    , unknown4+    , unknown5+    , unknown6+    , unknown7+    }
src/lib/Rattletrap/Type/AttributeType.hs view
@@ -26,6 +26,7 @@   | MusicStinger   | PartyLeader   | Pickup+  | PickupInfo   | PickupNew   | PlayerHistoryKey   | PrivateMatchSettings
src/lib/Rattletrap/Type/AttributeValue.hs view
@@ -32,6 +32,7 @@ import qualified Rattletrap.Type.Attribute.MusicStinger as MusicStinger import qualified Rattletrap.Type.Attribute.PartyLeader as PartyLeader import qualified Rattletrap.Type.Attribute.Pickup as Pickup+import qualified Rattletrap.Type.Attribute.PickupInfo as PickupInfo import qualified Rattletrap.Type.Attribute.PickupNew as PickupNew import qualified Rattletrap.Type.Attribute.PlayerHistoryKey as PlayerHistoryKey import qualified Rattletrap.Type.Attribute.PrivateMatchSettings as PrivateMatchSettings@@ -76,6 +77,7 @@   | MusicStinger MusicStinger.MusicStinger   | PartyLeader PartyLeader.PartyLeader   | Pickup Pickup.Pickup+  | PickupInfo PickupInfo.PickupInfo   | PickupNew PickupNew.PickupNew   | PlayerHistoryKey PlayerHistoryKey.PlayerHistoryKey   | PrivateMatchSettings PrivateMatchSettings.PrivateMatchSettings@@ -117,6 +119,7 @@     , fmap MusicStinger $ Json.required object "music_stinger"     , fmap PartyLeader $ Json.required object "party_leader"     , fmap Pickup $ Json.required object "pickup"+    , fmap PickupInfo $ Json.required object "pickup_info"     , fmap PickupNew $ Json.required object "pickup_new"     , fmap PlayerHistoryKey $ Json.required object "player_history_key"     , fmap PrivateMatchSettings $ Json.required object "private_match_settings"@@ -158,6 +161,7 @@     MusicStinger y -> Json.object [Json.pair "music_stinger" y]     PartyLeader y -> Json.object [Json.pair "party_leader" y]     Pickup y -> Json.object [Json.pair "pickup" y]+    PickupInfo y -> Json.object [Json.pair "pickup_info" y]     PickupNew y -> Json.object [Json.pair "pickup_new" y]     PlayerHistoryKey y -> Json.object [Json.pair "player_history_key" y]     PrivateMatchSettings y ->@@ -199,6 +203,7 @@   , ("location", Location.schema)   , ("music_stinger", MusicStinger.schema)   , ("party_leader", PartyLeader.schema)+  , ("pickup_info", PickupInfo.schema)   , ("pickup_new", PickupNew.schema)   , ("pickup", Pickup.schema)   , ("player_history_key", PlayerHistoryKey.schema)@@ -241,6 +246,7 @@   MusicStinger x -> MusicStinger.bitPut x   PartyLeader x -> PartyLeader.bitPut x   Pickup x -> Pickup.bitPut x+  PickupInfo x -> PickupInfo.bitPut x   PickupNew x -> PickupNew.bitPut x   PlayerHistoryKey x -> PlayerHistoryKey.bitPut x   PrivateMatchSettings x -> PrivateMatchSettings.bitPut x@@ -295,6 +301,7 @@     AttributeType.MusicStinger -> fmap MusicStinger MusicStinger.bitGet     AttributeType.PartyLeader -> fmap PartyLeader $ PartyLeader.bitGet version     AttributeType.Pickup -> fmap Pickup Pickup.bitGet+    AttributeType.PickupInfo -> fmap PickupInfo PickupInfo.bitGet     AttributeType.PickupNew -> fmap PickupNew PickupNew.bitGet     AttributeType.PlayerHistoryKey ->       fmap PlayerHistoryKey PlayerHistoryKey.bitGet
src/test/Main.hs view
@@ -69,6 +69,7 @@   , ("0416", "v1.78 demolition")   , ("07e9", "a game mode before Neo Tokyo")   , ("0ad2", "some Latin-1 text")+  , ("0e76", "v1.95 rumble")   , ("1205", "rumble mode")   , ("160c", "a dedicated server IP")   , ("16d5", "new property types")