packages feed

rattletrap 9.0.1 → 9.0.2

raw patch · 11 files changed

+131/−24 lines, 11 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Rattletrap: AttributeTypeFlaggedByte :: AttributeType
+ Rattletrap: AttributeValueFlaggedByte :: FlaggedByteAttribute -> AttributeValue

Files

README.markdown view
@@ -11,8 +11,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.62][], also known-as the "esports shop update". If a replay can be played by the Rocket League+Rattletrap supports every version of Rocket League up to [1.66][], also known+as the "season 12 update". 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!) @@ -51,8 +51,11 @@ Rattletrap is a command line application.  ``` sh-> rattletrap --help-rattletrap.EXE version 8.0.0+$ rattletrap --help+```++```+rattletrap version 9.0.1   -c           --compact         minify JSON output   -f           --fast            only encode or decode the header   -h           --help            show the help@@ -68,23 +71,23 @@ `encode`.  Input extension | Output extension | Mode---- | --- | ----`.replay` | anything | `decode` (parse)-`.json` | anything | `encode` (generate)-anything | `.replay` | `encode` (generate)-anything | `.json` | `decode` (parse)-anything | anything | `decode` (parse)+---             | ---              | ---+`.replay`       | anything         | `decode` (parse)+`.json`         | anything         | `encode` (generate)+anything        | `.replay`        | `encode` (generate)+anything        | `.json`          | `decode` (parse)+anything        | anything         | `decode` (parse)  ## Parse  Rattletrap can parse (decode) Rocket League replays and output them as JSON.  ``` sh-> rattletrap --input http://example.com/input.replay --output output.json+$ rattletrap --input http://example.com/input.replay --output output.json # or-> rattletrap -i input.replay -o output.json+$ rattletrap -i input.replay -o output.json # or-> rattletrap < input.replay > output.json+$ rattletrap < input.replay > output.json ```  The input argument can either be a local path or a URL.@@ -99,11 +102,11 @@ Rattletrap can also generate (encode) Rocket League replays from JSON files.  ``` sh-> rattletrap --input http://example.com/input.json --output output.replay+$ rattletrap --input http://example.com/input.json --output output.replay # or-> rattletrap -i input.json -o output.replay+$ rattletrap -i input.json -o output.replay # or-> rattletrap --mode encode < input.json > output.replay+$ rattletrap --mode encode < input.json > output.replay ```  The input argument can either be a local path or a URL.@@ -117,7 +120,7 @@ used to modify replays.  ``` sh-> rattletrap -i input.replay |+$ rattletrap -i input.replay |   modify-replay-json |   rattletrap -o output.replay ```@@ -132,7 +135,7 @@ [Docker build badge]: https://img.shields.io/docker/build/taylorfausak/rattletrap.svg?label=docker&logo=docker&logoColor=white [docker build]: https://hub.docker.com/r/taylorfausak/rattletrap [Rocket League]: https://www.rocketleague.com-[1.62]: https://www.rocketleague.com/news/patch-notes-v1-62/+[1.66]: https://www.rocketleague.com/news/patch-notes-v1-66-season-12-update-/ [Ball Chasing]: https://ballchasing.com [Haskell]: https://www.haskell.org [C# parser]: https://github.com/jjbott/RocketLeagueReplayParser
library/Rattletrap/Data.hs view
@@ -59,6 +59,7 @@   , ("TAGame.SpecialPickup_TA", "TAGame.CarComponent_TA")   , ("TAGame.SpecialPickup_Targeted_TA", "TAGame.SpecialPickup_TA")   , ("TAGame.SpecialPickup_Tornado_TA", "TAGame.SpecialPickup_TA")+  , ("TAGame.SpecialPickup_HauntedBallBeam_TA", "TAGame.SpecialPickup_TA")   , ("TAGame.Team_Soccar_TA", "TAGame.Team_TA")   , ("TAGame.Team_TA", "Engine.TeamInfo")   , ("TAGame.Vehicle_TA", "TAGame.RBActor_TA")@@ -69,10 +70,23 @@ rawClassesWithLocation :: [String] rawClassesWithLocation =   [ "TAGame.Ball_Breakout_TA"+  , "Archetypes.Ball.Ball_Breakout"   , "TAGame.Ball_TA"-  , "TAGame.CameraSettingsActor_TA"+  , "Archetypes.Ball.Ball_BasketBall_Mutator"+  , "Archetypes.Ball.Ball_BasketBall"+  , "Archetypes.Ball.Ball_Basketball"+  , "Archetypes.Ball.Ball_Default"+  , "Archetypes.Ball.Ball_Puck"+  , "Archetypes.Ball.CubeBall"+  , "Archetypes.Ball.Ball_Haunted"+  , "TAGame.Ball_Haunted_TA"   , "TAGame.Car_Season_TA"   , "TAGame.Car_TA"+  , "Archetypes.Car.Car_Default"+  , "Archetypes.GameEvent.GameEvent_Season:CarArchetype"+  , "Archetypes.SpecialPickups.SpecialPickup_HauntedBallBeam"+  , "Archetypes.SpecialPickups.SpecialPickup_Rugby"+  , "TAGame.CameraSettingsActor_TA"   , "TAGame.CarComponent_Boost_TA"   , "TAGame.CarComponent_Dodge_TA"   , "TAGame.CarComponent_DoubleJump_TA"@@ -96,14 +110,36 @@   , "TAGame.SpecialPickup_Swapper_TA"   , "TAGame.SpecialPickup_Tornado_TA"   , "TAGame.Team_Soccar_TA"+  , "TAGame.Default__CameraSettingsActor_TA"+  , "TAGame.Default__PRI_TA"+  , "TheWorld:PersistentLevel.BreakOutActor_Platform_TA"+  , "TheWorld:PersistentLevel.CrowdActor_TA"+  , "TheWorld:PersistentLevel.CrowdManager_TA"+  , "TheWorld:PersistentLevel.InMapScoreboard_TA"+  , "TheWorld:PersistentLevel.VehiclePickup_Boost_TA"+  , "TAGame.HauntedBallTrapTrigger_TA"+  , "ProjectX.NetModeReplicator"   ]  rawClassesWithRotation :: [String] rawClassesWithRotation =   [ "TAGame.Ball_Breakout_TA"+  , "Archetypes.Ball.Ball_Breakout"   , "TAGame.Ball_TA"+  , "Archetypes.Ball.Ball_BasketBall_Mutator"+  , "Archetypes.Ball.Ball_BasketBall"+  , "Archetypes.Ball.Ball_Basketball"+  , "Archetypes.Ball.Ball_Default"+  , "Archetypes.Ball.Ball_Puck"+  , "Archetypes.Ball.CubeBall"+  , "Archetypes.Ball.Ball_Haunted"+  , "TAGame.Ball_Haunted_TA"   , "TAGame.Car_Season_TA"   , "TAGame.Car_TA"+  , "Archetypes.Car.Car_Default"+  , "Archetypes.GameEvent.GameEvent_Season:CarArchetype"+  , "Archetypes.SpecialPickups.SpecialPickup_HauntedBallBeam"+  , "Archetypes.SpecialPickups.SpecialPickup_Rugby"   -- This comments forces Brittany to use a multi-line layout for this list.   ] @@ -112,8 +148,10 @@   [ ("Archetypes.Ball.Ball_BasketBall_Mutator", "TAGame.Ball_TA")   , ("Archetypes.Ball.Ball_Basketball", "TAGame.Ball_TA")   , ("Archetypes.Ball.Ball_BasketBall", "TAGame.Ball_TA")+  , ("Archetypes.Ball.Ball_Beachball", "TAGame.Ball_TA")   , ("Archetypes.Ball.Ball_Breakout", "TAGame.Ball_Breakout_TA")   , ("Archetypes.Ball.Ball_Default", "TAGame.Ball_TA")+  , ("Archetypes.Ball.Ball_Haunted", "TAGame.Ball_Haunted_TA")   , ("Archetypes.Ball.Ball_Puck", "TAGame.Ball_TA")   , ("Archetypes.Ball.CubeBall", "TAGame.Ball_TA")   , ("Archetypes.Car.Car_Default", "TAGame.Car_TA")@@ -148,6 +186,8 @@   , ("Archetypes.SpecialPickups.SpecialPickup_StrongHit", "TAGame.SpecialPickup_HitForce_TA")   , ("Archetypes.SpecialPickups.SpecialPickup_Swapper", "TAGame.SpecialPickup_Swapper_TA")   , ("Archetypes.SpecialPickups.SpecialPickup_Tornado", "TAGame.SpecialPickup_Tornado_TA")+  , ("Archetypes.SpecialPickups.SpecialPickup_HauntedBallBeam", "TAGame.SpecialPickup_HauntedBallBeam_TA")+  , ("Archetypes.SpecialPickups.SpecialPickup_Rugby", "TAGame.SpecialPickup_Rugby_TA")   , ("Archetypes.Teams.Team0", "TAGame.Team_Soccar_TA")   , ("Archetypes.Teams.Team1", "TAGame.Team_Soccar_TA")   , ("GameInfo_Basketball.GameInfo.GameInfo_Basketball:GameReplicationInfoArchetype", "TAGame.GRI_TA")@@ -156,6 +196,7 @@   , ("GameInfo_Items.GameInfo.GameInfo_Items:GameReplicationInfoArchetype", "TAGame.GRI_TA")   , ("GameInfo_Season.GameInfo.GameInfo_Season:GameReplicationInfoArchetype", "TAGame.GRI_TA")   , ("GameInfo_Soccar.GameInfo.GameInfo_Soccar:GameReplicationInfoArchetype", "TAGame.GRI_TA")+  , ("ProjectX.Default__NetModeReplicator_X", "ProjectX.NetModeReplicator")   , ("TAGame.Default__CameraSettingsActor_TA", "TAGame.CameraSettingsActor_TA")   , ("TAGame.Default__PRI_TA", "TAGame.PRI_TA")   , ("TheWorld:PersistentLevel.BreakOutActor_Platform_TA", "TAGame.BreakOutActor_Platform_TA")@@ -163,6 +204,8 @@   , ("TheWorld:PersistentLevel.CrowdManager_TA", "TAGame.CrowdManager_TA")   , ("TheWorld:PersistentLevel.InMapScoreboard_TA", "TAGame.InMapScoreboard_TA")   , ("TheWorld:PersistentLevel.VehiclePickup_Boost_TA", "TAGame.VehiclePickup_Boost_TA")+  , ("Haunted_TrainStation_P.TheWorld:PersistentLevel.HauntedBallTrapTrigger_TA_1", "TAGame.HauntedBallTrapTrigger_TA")+  , ("Haunted_TrainStation_P.TheWorld:PersistentLevel.HauntedBallTrapTrigger_TA_0", "TAGame.HauntedBallTrapTrigger_TA")   ]  rawAttributeTypes :: [(String, AttributeType)]@@ -297,15 +340,16 @@   , ("TAGame.PRI_TA:PersistentCamera", AttributeTypeFlaggedInt)   , ("TAGame.PRI_TA:PlayerHistoryKey", AttributeTypePlayerHistoryKey)   , ("TAGame.PRI_TA:PlayerHistoryValid", AttributeTypeBoolean)-  , ("TAGame.PRI_TA:PrimaryTitle", AttributeTypeTitle)   , ("TAGame.PRI_TA:ReplicatedGameEvent", AttributeTypeFlaggedInt)   , ("TAGame.PRI_TA:ReplicatedWorstNetQualityBeyondLatency", AttributeTypeByte)-  , ("TAGame.PRI_TA:SecondaryTitle", AttributeTypeTitle)-  , ("TAGame.PRI_TA:SpectatorShortcut", AttributeTypeInt)   , ("TAGame.PRI_TA:SteeringSensitivity", AttributeTypeFloat)+  , ("TAGame.PRI_TA:SkillTier", AttributeTypeFlaggedByte)   , ("TAGame.PRI_TA:TimeTillItem", AttributeTypeInt)   , ("TAGame.PRI_TA:Title", AttributeTypeInt)   , ("TAGame.PRI_TA:TotalXP", AttributeTypeInt)+  , ("TAGame.PRI_TA:PrimaryTitle", AttributeTypeTitle)+  , ("TAGame.PRI_TA:SecondaryTitle", AttributeTypeTitle)+  , ("TAGame.PRI_TA:SpectatorShortcut", AttributeTypeInt)   , ("TAGame.RBActor_TA:bFrozen", AttributeTypeBoolean)   , ("TAGame.RBActor_TA:bIgnoreSyncing", AttributeTypeBoolean)   , ("TAGame.RBActor_TA:bReplayActor", AttributeTypeBoolean)@@ -329,6 +373,12 @@   , ("TAGame.Vehicle_TA:ReplicatedThrottle", AttributeTypeByte)   , ("TAGame.VehiclePickup_TA:bNoPickup", AttributeTypeBoolean)   , ("TAGame.VehiclePickup_TA:ReplicatedPickupData", AttributeTypePickup)+  , ("TAGame.Ball_Haunted_TA:LastTeamTouch", AttributeTypeByte)+  , ("TAGame.Ball_Haunted_TA:TotalActiveBeams", AttributeTypeByte)+  , ("TAGame.Ball_Haunted_TA:DeactivatedGoalIndex", AttributeTypeByte)+  , ("TAGame.Ball_Haunted_TA:ReplicatedBeamBrokenValue", AttributeTypeByte)+  , ("TAGame.Ball_Haunted_TA:bIsBallBeamed", AttributeTypeBoolean)+  , ("TAGame.SpecialPickup_Rugby_TA:bBallWelded", AttributeTypeBoolean)   ]  rawCrc32Table :: Integral a => [a]
library/Rattletrap/Decode/AttributeValue.hs view
@@ -17,6 +17,7 @@ import Rattletrap.Decode.ExplosionAttribute import Rattletrap.Decode.ExtendedExplosionAttribute import Rattletrap.Decode.FlaggedIntAttribute+import Rattletrap.Decode.FlaggedByteAttribute import Rattletrap.Decode.FloatAttribute import Rattletrap.Decode.GameModeAttribute import Rattletrap.Decode.Int64Attribute@@ -76,6 +77,8 @@       <$> decodeExtendedExplosionAttributeBits version     AttributeTypeFlaggedInt ->       AttributeValueFlaggedInt <$> decodeFlaggedIntAttributeBits+    AttributeTypeFlaggedByte ->+      AttributeValueFlaggedByte <$> decodeFlaggedByteAttributeBits     AttributeTypeFloat -> AttributeValueFloat <$> decodeFloatAttributeBits     AttributeTypeGameMode ->       AttributeValueGameMode <$> decodeGameModeAttributeBits version
+ library/Rattletrap/Decode/FlaggedByteAttribute.hs view
@@ -0,0 +1,12 @@+module Rattletrap.Decode.FlaggedByteAttribute+  ( decodeFlaggedByteAttributeBits+  )+where++import Rattletrap.Decode.Common+import Rattletrap.Decode.Word8le+import Rattletrap.Type.FlaggedByteAttribute+++decodeFlaggedByteAttributeBits :: DecodeBits FlaggedByteAttribute+decodeFlaggedByteAttributeBits = FlaggedByteAttribute <$> getBool <*> decodeWord8leBits
library/Rattletrap/Encode/AttributeValue.hs view
@@ -14,6 +14,7 @@ import Rattletrap.Encode.ExplosionAttribute import Rattletrap.Encode.ExtendedExplosionAttribute import Rattletrap.Encode.FlaggedIntAttribute+import Rattletrap.Encode.FlaggedByteAttribute import Rattletrap.Encode.FloatAttribute import Rattletrap.Encode.GameModeAttribute import Rattletrap.Encode.Int64Attribute@@ -54,6 +55,7 @@   AttributeValueExplosion x -> putExplosionAttribute x   AttributeValueExtendedExplosion x -> putExtendedExplosionAttribute x   AttributeValueFlaggedInt x -> putFlaggedIntAttribute x+  AttributeValueFlaggedByte x -> putFlaggedByteAttribute x   AttributeValueFloat x -> putFloatAttribute x   AttributeValueGameMode x -> putGameModeAttribute x   AttributeValueInt x -> putIntAttribute x
+ library/Rattletrap/Encode/FlaggedByteAttribute.hs view
@@ -0,0 +1,14 @@+module Rattletrap.Encode.FlaggedByteAttribute+  ( putFlaggedByteAttribute+  )+where++import Rattletrap.Encode.Word8le+import Rattletrap.Type.FlaggedByteAttribute++import qualified Data.Binary.Bits.Put as BinaryBits++putFlaggedByteAttribute :: FlaggedByteAttribute -> BinaryBits.BitPut ()+putFlaggedByteAttribute flaggedByteAttribute = do+  BinaryBits.putBool (flaggedByteAttributeFlag flaggedByteAttribute)+  putWord8Bits (flaggedByteAttributeByte flaggedByteAttribute)
library/Rattletrap/Type/AttributeType.hs view
@@ -19,6 +19,7 @@   | AttributeTypeExplosion   | AttributeTypeExtendedExplosion   | AttributeTypeFlaggedInt+  | AttributeTypeFlaggedByte   | AttributeTypeFloat   | AttributeTypeGameMode   | AttributeTypeInt
library/Rattletrap/Type/AttributeValue.hs view
@@ -17,6 +17,7 @@ import Rattletrap.Type.ExplosionAttribute import Rattletrap.Type.ExtendedExplosionAttribute import Rattletrap.Type.FlaggedIntAttribute+import Rattletrap.Type.FlaggedByteAttribute import Rattletrap.Type.FloatAttribute import Rattletrap.Type.GameModeAttribute import Rattletrap.Type.Int64Attribute@@ -53,6 +54,7 @@   | AttributeValueExplosion ExplosionAttribute   | AttributeValueExtendedExplosion ExtendedExplosionAttribute   | AttributeValueFlaggedInt FlaggedIntAttribute+  | AttributeValueFlaggedByte FlaggedByteAttribute   | AttributeValueFloat FloatAttribute   | AttributeValueGameMode GameModeAttribute   | AttributeValueInt IntAttribute
+ library/Rattletrap/Type/FlaggedByteAttribute.hs view
@@ -0,0 +1,16 @@+{-# LANGUAGE TemplateHaskell #-}++module Rattletrap.Type.FlaggedByteAttribute+  ( FlaggedByteAttribute(..)+  )+where++import Rattletrap.Type.Common+import Rattletrap.Type.Word8le++data FlaggedByteAttribute = FlaggedByteAttribute+  { flaggedByteAttributeFlag :: Bool+  , flaggedByteAttributeByte :: Word8le+  } deriving (Eq, Ord, Show)++$(deriveJson ''FlaggedByteAttribute)
rattletrap.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.2  name: rattletrap-version: 9.0.1+version: 9.0.2  category: Game description: Rattletrap parses and generates Rocket League replays.@@ -78,6 +78,7 @@     Rattletrap.Decode.ExplosionAttribute     Rattletrap.Decode.ExtendedExplosionAttribute     Rattletrap.Decode.FlaggedIntAttribute+    Rattletrap.Decode.FlaggedByteAttribute     Rattletrap.Decode.Float32le     Rattletrap.Decode.FloatAttribute     Rattletrap.Decode.Frame@@ -152,6 +153,7 @@     Rattletrap.Encode.ExplosionAttribute     Rattletrap.Encode.ExtendedExplosionAttribute     Rattletrap.Encode.FlaggedIntAttribute+    Rattletrap.Encode.FlaggedByteAttribute     Rattletrap.Encode.Float32le     Rattletrap.Encode.FloatAttribute     Rattletrap.Encode.Frame@@ -228,6 +230,7 @@     Rattletrap.Type.ExplosionAttribute     Rattletrap.Type.ExtendedExplosionAttribute     Rattletrap.Type.FlaggedIntAttribute+    Rattletrap.Type.FlaggedByteAttribute     Rattletrap.Type.Float32le     Rattletrap.Type.FloatAttribute     Rattletrap.Type.Frame
tests/Main.hs view
@@ -95,7 +95,8 @@  replays :: [(String, String)] replays =-  [ ("0008", "a flip time")+  [ ("21a8", "v1.66")+  , ("0008", "a flip time")   , ("000b", "nintendo switch")   , ("07e9", "a game mode before Neo Tokyo")   , ("0ad2", "some Latin-1 text")