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 +3/−3
- rattletrap.cabal +2/−1
- src/lib/Rattletrap/Console/Main.hs +2/−0
- src/lib/Rattletrap/Data.hs +3/−0
- src/lib/Rattletrap/Type/Attribute/PickupInfo.hs +89/−0
- src/lib/Rattletrap/Type/AttributeType.hs +1/−0
- src/lib/Rattletrap/Type/AttributeValue.hs +7/−0
- src/test/Main.hs +1/−0
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")