packages feed

rattletrap 0.1.7 → 0.2.0

raw patch · 8 files changed

+287/−229 lines, 8 filesdep −regex-compatPVP ok

version bump matches the API change (PVP)

Dependencies removed: regex-compat

API changes (from Hackage documentation)

- Rattletrap.Utility: replace :: String -> String -> String -> String
- Rattletrap.ClassAttributeMap: ClassAttributeMap :: Bimap Word32 Text -> Bimap Word32 Text -> Map Word32 (Bimap Word32 Word32) -> ClassAttributeMap
+ Rattletrap.ClassAttributeMap: ClassAttributeMap :: Map Word32 Text -> Bimap Word32 Text -> Map Word32 (Map Word32 Word32) -> ClassAttributeMap
- Rattletrap.ClassAttributeMap: [classAttributeMapObjectMap] :: ClassAttributeMap -> Bimap Word32 Text
+ Rattletrap.ClassAttributeMap: [classAttributeMapObjectMap] :: ClassAttributeMap -> Map Word32 Text
- Rattletrap.ClassAttributeMap: [classAttributeMapValue] :: ClassAttributeMap -> Map Word32 (Bimap Word32 Word32)
+ Rattletrap.ClassAttributeMap: [classAttributeMapValue] :: ClassAttributeMap -> Map Word32 (Map Word32 Word32)
- Rattletrap.ClassAttributeMap: getAttributeMap :: ClassAttributeMap -> ActorMap -> CompressedWord -> Maybe (Bimap Word32 Word32)
+ Rattletrap.ClassAttributeMap: getAttributeMap :: ClassAttributeMap -> ActorMap -> CompressedWord -> Maybe (Map Word32 Word32)
- Rattletrap.ClassAttributeMap: makeAttributeMap :: List Cache -> Map Word32 (Bimap Word32 Word32)
+ Rattletrap.ClassAttributeMap: makeAttributeMap :: List Cache -> Map Word32 (Map Word32 Word32)
- Rattletrap.ClassAttributeMap: makeObjectMap :: List Text -> Bimap Word32 Text
+ Rattletrap.ClassAttributeMap: makeObjectMap :: List Text -> Map Word32 Text

Files

README.markdown view
@@ -11,8 +11,8 @@ Get Rattletrap by downloading and unpacking [the latest release][] for your platform. -To build Rattletrap from source, install [Stack][]. Then download this-repository and run `stack --install-ghc install`.+To build Rattletrap from source, install [Stack][]. Then run+`stack --resolver nightly install rattletrap`.  ## Replays @@ -65,7 +65,7 @@  [Rattletrap]: https://github.com/tfausak/rattletrap [Version badge]: https://www.stackage.org/package/rattletrap/badge/nightly?label=version-[version]: https://www.stackage.org/nightly/package/rattletrap+[version]: https://www.stackage.org/package/rattletrap [Windows build badge]: https://ci.appveyor.com/api/projects/status/github/tfausak/rattletrap?branch=master&svg=true [windows build]: https://ci.appveyor.com/project/TaylorFausak/rattletrap [Build badge]: https://travis-ci.org/tfausak/rattletrap.svg?branch=master
executable/Main.hs view
@@ -53,72 +53,77 @@     [i, o] -> pure (ByteString.readFile i, ByteString.writeFile o)     _ -> fail ("unexpected arguments " ++ show files) -$(Monad.foldM-    (\declarations name -> do-       let options =-             Casing.aesonDrop (length (TH.nameBase name)) Casing.snakeCase-       newDeclarations <- Aeson.deriveJSON options name-       pure (newDeclarations ++ declarations))-    []-    [ ''Attribute-    , ''AttributeMapping-    , ''AttributeValue-    , ''BooleanAttributeValue-    , ''ByteAttributeValue-    , ''Cache-    , ''CamSettingsAttributeValue-    , ''ClassMapping-    , ''ClubColorsAttributeValue-    , ''CompressedWord-    , ''CompressedWordVector-    , ''Content-    , ''DemolishAttributeValue-    , ''DestroyedReplicationValue-    , ''Dictionary-    , ''EnumAttributeValue-    , ''ExplosionAttributeValue-    , ''FlaggedIntAttributeValue-    , ''Float32-    , ''FloatAttributeValue-    , ''Frame-    , ''GameModeAttributeValue-    , ''Header-    , ''Initialization-    , ''Int32-    , ''Int8-    , ''Int8Vector-    , ''IntAttributeValue-    , ''KeyFrame-    , ''List-    , ''LoadoutAttributeValue-    , ''LoadoutOnlineAttributeValue-    , ''LoadoutsAttributeValue-    , ''LoadoutsOnlineAttributeValue-    , ''LocationAttributeValue-    , ''Mark-    , ''Message-    , ''MusicStingerAttributeValue-    , ''PartyLeaderAttributeValue-    , ''PickupAttributeValue-    , ''PrivateMatchSettingsAttributeValue-    , ''Property-    , ''PropertyValue-    , ''QWordAttributeValue-    , ''RemoteId-    , ''Replay-    , ''Replication-    , ''ReplicationValue-    , ''ReservationAttributeValue-    , ''RigidBodyStateAttributeValue-    , ''SpawnedReplicationValue-    , ''StringAttributeValue-    , ''TeamPaintAttributeValue-    , ''Text-    , ''UniqueIdAttributeValue-    , ''UpdatedReplicationValue-    , ''Vector-    , ''WeldedInfoAttributeValue-    , ''Word32-    , ''Word64-    , ''Word8-    ])+$(let optionsFor name =+        (Casing.aesonDrop (length (TH.nameBase name)) Casing.snakeCase)+        { Aeson.constructorTagModifier = Casing.snakeCase+        , Aeson.omitNothingFields = True+        , Aeson.sumEncoding = Aeson.ObjectWithSingleField+        , Aeson.unwrapUnaryRecords = True+        }+      deriveJSON declarations name = do+        newDeclarations <- Aeson.deriveJSON (optionsFor name) name+        pure (newDeclarations ++ declarations)+      names =+        [ ''Attribute+        , ''AttributeMapping+        , ''AttributeValue+        , ''BooleanAttributeValue+        , ''ByteAttributeValue+        , ''Cache+        , ''CamSettingsAttributeValue+        , ''ClassMapping+        , ''ClubColorsAttributeValue+        , ''CompressedWord+        , ''CompressedWordVector+        , ''Content+        , ''DemolishAttributeValue+        , ''DestroyedReplicationValue+        , ''Dictionary+        , ''EnumAttributeValue+        , ''ExplosionAttributeValue+        , ''FlaggedIntAttributeValue+        , ''Float32+        , ''FloatAttributeValue+        , ''Frame+        , ''GameModeAttributeValue+        , ''Header+        , ''Initialization+        , ''Int32+        , ''Int8+        , ''Int8Vector+        , ''IntAttributeValue+        , ''KeyFrame+        , ''List+        , ''LoadoutAttributeValue+        , ''LoadoutOnlineAttributeValue+        , ''LoadoutsAttributeValue+        , ''LoadoutsOnlineAttributeValue+        , ''LocationAttributeValue+        , ''Mark+        , ''Message+        , ''MusicStingerAttributeValue+        , ''PartyLeaderAttributeValue+        , ''PickupAttributeValue+        , ''PrivateMatchSettingsAttributeValue+        , ''Property+        , ''PropertyValue+        , ''QWordAttributeValue+        , ''RemoteId+        , ''Replay+        , ''Replication+        , ''ReplicationValue+        , ''ReservationAttributeValue+        , ''RigidBodyStateAttributeValue+        , ''SpawnedReplicationValue+        , ''StringAttributeValue+        , ''TeamPaintAttributeValue+        , ''Text+        , ''UniqueIdAttributeValue+        , ''UpdatedReplicationValue+        , ''Vector+        , ''WeldedInfoAttributeValue+        , ''Word32+        , ''Word64+        , ''Word8+        ]+  in Monad.foldM deriveJSON [] names)
library/Rattletrap.hs view
@@ -1,42 +1,79 @@ module Rattletrap-  ( module Export+  ( module Rattletrap.ActorMap+  , module Rattletrap.Attribute+  , module Rattletrap.AttributeMapping+  , module Rattletrap.AttributeValue+  , module Rattletrap.AttributeValueType+  , module Rattletrap.Cache+  , module Rattletrap.ClassAttributeMap+  , module Rattletrap.ClassMapping+  , module Rattletrap.CompressedWord+  , module Rattletrap.CompressedWordVector+  , module Rattletrap.Content+  , module Rattletrap.Crc+  , module Rattletrap.Data+  , module Rattletrap.Dictionary+  , module Rattletrap.Float32+  , module Rattletrap.Frame+  , module Rattletrap.Header+  , module Rattletrap.Initialization+  , module Rattletrap.Int32+  , module Rattletrap.Int8+  , module Rattletrap.Int8Vector+  , module Rattletrap.KeyFrame+  , module Rattletrap.List+  , module Rattletrap.Mark+  , module Rattletrap.Message+  , module Rattletrap.Property+  , module Rattletrap.PropertyValue+  , module Rattletrap.RemoteId+  , module Rattletrap.Replay+  , module Rattletrap.Replication+  , module Rattletrap.ReplicationValue+  , module Rattletrap.Text+  , module Rattletrap.Utility+  , module Rattletrap.Vector+  , module Rattletrap.Version+  , module Rattletrap.Word32+  , module Rattletrap.Word64+  , module Rattletrap.Word8   ) where -import Rattletrap.ActorMap as Export-import Rattletrap.Attribute as Export-import Rattletrap.AttributeMapping as Export-import Rattletrap.AttributeValue as Export-import Rattletrap.AttributeValueType as Export-import Rattletrap.Cache as Export-import Rattletrap.ClassAttributeMap as Export-import Rattletrap.ClassMapping as Export-import Rattletrap.CompressedWord as Export-import Rattletrap.CompressedWordVector as Export-import Rattletrap.Content as Export-import Rattletrap.Crc as Export-import Rattletrap.Data as Export-import Rattletrap.Dictionary as Export-import Rattletrap.Float32 as Export-import Rattletrap.Frame as Export-import Rattletrap.Header as Export-import Rattletrap.Initialization as Export-import Rattletrap.Int32 as Export-import Rattletrap.Int8 as Export-import Rattletrap.Int8Vector as Export-import Rattletrap.KeyFrame as Export-import Rattletrap.List as Export-import Rattletrap.Mark as Export-import Rattletrap.Message as Export-import Rattletrap.Property as Export-import Rattletrap.PropertyValue as Export-import Rattletrap.RemoteId as Export-import Rattletrap.Replay as Export-import Rattletrap.Replication as Export-import Rattletrap.ReplicationValue as Export-import Rattletrap.Text as Export-import Rattletrap.Utility as Export-import Rattletrap.Vector as Export-import Rattletrap.Version as Export-import Rattletrap.Word32 as Export-import Rattletrap.Word64 as Export-import Rattletrap.Word8 as Export+import Rattletrap.ActorMap+import Rattletrap.Attribute+import Rattletrap.AttributeMapping+import Rattletrap.AttributeValue+import Rattletrap.AttributeValueType+import Rattletrap.Cache+import Rattletrap.ClassAttributeMap+import Rattletrap.ClassMapping+import Rattletrap.CompressedWord+import Rattletrap.CompressedWordVector+import Rattletrap.Content+import Rattletrap.Crc+import Rattletrap.Data+import Rattletrap.Dictionary+import Rattletrap.Float32+import Rattletrap.Frame+import Rattletrap.Header+import Rattletrap.Initialization+import Rattletrap.Int32+import Rattletrap.Int8+import Rattletrap.Int8Vector+import Rattletrap.KeyFrame+import Rattletrap.List+import Rattletrap.Mark+import Rattletrap.Message+import Rattletrap.Property+import Rattletrap.PropertyValue+import Rattletrap.RemoteId+import Rattletrap.Replay+import Rattletrap.Replication+import Rattletrap.ReplicationValue+import Rattletrap.Text+import Rattletrap.Utility+import Rattletrap.Vector+import Rattletrap.Version+import Rattletrap.Word32+import Rattletrap.Word64+import Rattletrap.Word8
library/Rattletrap/AttributeValue.hs view
@@ -1,36 +1,61 @@ module Rattletrap.AttributeValue   ( module Rattletrap.AttributeValue-  , module Export+  , module Rattletrap.AttributeValue.Boolean+  , module Rattletrap.AttributeValue.Byte+  , module Rattletrap.AttributeValue.CamSettings+  , module Rattletrap.AttributeValue.ClubColors+  , module Rattletrap.AttributeValue.Demolish+  , module Rattletrap.AttributeValue.Enum+  , module Rattletrap.AttributeValue.Explosion+  , module Rattletrap.AttributeValue.FlaggedInt+  , module Rattletrap.AttributeValue.Float+  , module Rattletrap.AttributeValue.GameMode+  , module Rattletrap.AttributeValue.Int+  , module Rattletrap.AttributeValue.Loadout+  , module Rattletrap.AttributeValue.LoadoutOnline+  , module Rattletrap.AttributeValue.Loadouts+  , module Rattletrap.AttributeValue.LoadoutsOnline+  , module Rattletrap.AttributeValue.Location+  , module Rattletrap.AttributeValue.MusicStinger+  , module Rattletrap.AttributeValue.PartyLeader+  , module Rattletrap.AttributeValue.Pickup+  , module Rattletrap.AttributeValue.PrivateMatchSettings+  , module Rattletrap.AttributeValue.QWord+  , module Rattletrap.AttributeValue.Reservation+  , module Rattletrap.AttributeValue.RigidBodyState+  , module Rattletrap.AttributeValue.String+  , module Rattletrap.AttributeValue.TeamPaint+  , module Rattletrap.AttributeValue.UniqueId+  , module Rattletrap.AttributeValue.WeldedInfo   ) where -import Rattletrap.AttributeValue.Boolean as Export-import Rattletrap.AttributeValue.Byte as Export-import Rattletrap.AttributeValue.CamSettings as Export-import Rattletrap.AttributeValue.ClubColors as Export-import Rattletrap.AttributeValue.Demolish as Export-import Rattletrap.AttributeValue.Enum as Export-import Rattletrap.AttributeValue.Explosion as Export-import Rattletrap.AttributeValue.FlaggedInt as Export-import Rattletrap.AttributeValue.Float as Export-import Rattletrap.AttributeValue.GameMode as Export-import Rattletrap.AttributeValue.Int as Export-import Rattletrap.AttributeValue.Loadout as Export-import Rattletrap.AttributeValue.LoadoutOnline as Export-import Rattletrap.AttributeValue.Loadouts as Export-import Rattletrap.AttributeValue.LoadoutsOnline as Export-import Rattletrap.AttributeValue.Location as Export-import Rattletrap.AttributeValue.MusicStinger as Export-import Rattletrap.AttributeValue.PartyLeader as Export-import Rattletrap.AttributeValue.Pickup as Export-import Rattletrap.AttributeValue.PrivateMatchSettings as Export-import Rattletrap.AttributeValue.QWord as Export-import Rattletrap.AttributeValue.Reservation as Export-import Rattletrap.AttributeValue.RigidBodyState as Export-import Rattletrap.AttributeValue.String as Export-import Rattletrap.AttributeValue.TeamPaint as Export-import Rattletrap.AttributeValue.UniqueId as Export-import Rattletrap.AttributeValue.WeldedInfo as Export-+import Rattletrap.AttributeValue.Boolean+import Rattletrap.AttributeValue.Byte+import Rattletrap.AttributeValue.CamSettings+import Rattletrap.AttributeValue.ClubColors+import Rattletrap.AttributeValue.Demolish+import Rattletrap.AttributeValue.Enum+import Rattletrap.AttributeValue.Explosion+import Rattletrap.AttributeValue.FlaggedInt+import Rattletrap.AttributeValue.Float+import Rattletrap.AttributeValue.GameMode+import Rattletrap.AttributeValue.Int+import Rattletrap.AttributeValue.Loadout+import Rattletrap.AttributeValue.LoadoutOnline+import Rattletrap.AttributeValue.Loadouts+import Rattletrap.AttributeValue.LoadoutsOnline+import Rattletrap.AttributeValue.Location+import Rattletrap.AttributeValue.MusicStinger+import Rattletrap.AttributeValue.PartyLeader+import Rattletrap.AttributeValue.Pickup+import Rattletrap.AttributeValue.PrivateMatchSettings+import Rattletrap.AttributeValue.QWord+import Rattletrap.AttributeValue.Reservation+import Rattletrap.AttributeValue.RigidBodyState+import Rattletrap.AttributeValue.String+import Rattletrap.AttributeValue.TeamPaint+import Rattletrap.AttributeValue.UniqueId+import Rattletrap.AttributeValue.WeldedInfo import Rattletrap.AttributeValueType import Rattletrap.Data import Rattletrap.Text
library/Rattletrap/ClassAttributeMap.hs view
@@ -6,9 +6,9 @@ import Rattletrap.ClassMapping import Rattletrap.CompressedWord import Rattletrap.Data+import Rattletrap.Int32 import Rattletrap.List import Rattletrap.Text-import Rattletrap.Utility import Rattletrap.Word32  import qualified Data.Bimap as Bimap@@ -16,17 +16,15 @@ import qualified Data.Map as Map import qualified Data.Maybe as Maybe import qualified Data.Set as Set+import qualified Data.Text as Text  data ClassAttributeMap = ClassAttributeMap-  { classAttributeMapObjectMap :: Bimap.Bimap Word32 Text+  { classAttributeMapObjectMap :: Map.Map Word32 Text   , classAttributeMapClassMap :: Bimap.Bimap Word32 Text-  , classAttributeMapValue :: Map.Map Word32 (Bimap.Bimap Word32 Word32)+  , classAttributeMapValue :: Map.Map Word32 (Map.Map Word32 Word32)   } deriving (Eq, Show) -makeClassAttributeMap :: List Text-                      -> List ClassMapping-                      -> List Cache-                      -> ClassAttributeMap+makeClassAttributeMap :: List Text -> List ClassMapping -> List Cache -> ClassAttributeMap makeClassAttributeMap objects classMappings caches =   let objectMap = makeObjectMap objects       classCache = makeClassCache classMappings caches@@ -37,22 +35,22 @@         Map.fromList           (map              (\classId ->-                let ownAttributes =-                      Maybe.fromMaybe-                        Bimap.empty-                        (Map.lookup classId attributeMap)-                    parentsAttributes =-                      case Map.lookup classId parentMap of-                        Nothing -> []-                        Just parentClassIds ->-                          map-                            (\parentClassId ->-                               Maybe.fromMaybe-                                 Bimap.empty-                                 (Map.lookup parentClassId attributeMap))-                            parentClassIds-                    attributes = ownAttributes : parentsAttributes-                in (classId, Bimap.fromList (concatMap Bimap.toList attributes)))+                 let ownAttributes =+                       Maybe.fromMaybe+                         Map.empty+                         (Map.lookup classId attributeMap)+                     parentsAttributes =+                       case Map.lookup classId parentMap of+                         Nothing -> []+                         Just parentClassIds ->+                           map+                             (\parentClassId ->+                                 Maybe.fromMaybe+                                   Map.empty+                                   (Map.lookup parentClassId attributeMap))+                             parentClassIds+                     attributes = ownAttributes : parentsAttributes+                 in (classId, Map.fromList (concatMap Map.toList attributes)))              classIds)   in ClassAttributeMap      { classAttributeMapObjectMap = objectMap@@ -67,11 +65,11 @@   let classMap = makeClassMap classMappings   in map        (\cache ->-          let classId = cacheClassId cache-          in ( Bimap.lookup classId classMap-             , classId-             , cacheCacheId cache-             , cacheParentCacheId cache))+           let classId = cacheClassId cache+           in ( Bimap.lookup classId classMap+              , classId+              , cacheCacheId cache+              , cacheParentCacheId cache))        (listValue caches)  makeClassMap :: List ClassMapping -> Bimap.Bimap Word32 Text@@ -79,21 +77,21 @@   Bimap.fromList     (map        (\classMapping ->-          (classMappingStreamId classMapping, classMappingName classMapping))+           (classMappingStreamId classMapping, classMappingName classMapping))        (listValue classMappings)) -makeAttributeMap :: List Cache -> Map.Map Word32 (Bimap.Bimap Word32 Word32)+makeAttributeMap :: List Cache -> Map.Map Word32 (Map.Map Word32 Word32) makeAttributeMap caches =   Map.fromList     (map        (\cache ->-          ( cacheClassId cache-          , Bimap.fromList-              (map-                 (\attributeMapping ->-                    ( attributeMappingStreamId attributeMapping-                    , attributeMappingObjectId attributeMapping))-                 (listValue (cacheAttributeMappings cache)))))+           ( cacheClassId cache+           , Map.fromList+               (map+                  (\attributeMapping ->+                      ( attributeMappingStreamId attributeMapping+                      , attributeMappingObjectId attributeMapping))+                  (listValue (cacheAttributeMappings cache)))))        (listValue caches))  makeShallowParentMap :: List ClassMapping -> List Cache -> Map.Map Word32 Word32@@ -102,27 +100,23 @@   in Map.fromList        (Maybe.mapMaybe           (\xs ->-             case xs of-               [] -> Nothing-               (maybeClassName, classId, _, parentCacheId):rest -> do-                 parentClassId <--                   getParentClass maybeClassName parentCacheId rest-                 pure (classId, parentClassId))+              case xs of+                [] -> Nothing+                (maybeClassName, classId, _, parentCacheId):rest -> do+                  parentClassId <- getParentClass maybeClassName parentCacheId rest+                  pure (classId, parentClassId))           (List.tails (reverse classCache)))  makeParentMap :: List ClassMapping -> List Cache -> Map.Map Word32 [Word32] makeParentMap classMappings caches =   let shallowParentMap = makeShallowParentMap classMappings caches-  in Map.mapWithKey-       (\classId _ -> getParentClasses shallowParentMap classId)-       shallowParentMap+  in Map.mapWithKey (\classId _ -> getParentClasses shallowParentMap classId) shallowParentMap  getParentClasses :: Map.Map Word32 Word32 -> Word32 -> [Word32] getParentClasses shallowParentMap classId =   case Map.lookup classId shallowParentMap of     Nothing -> []-    Just parentClassId ->-      parentClassId : getParentClasses shallowParentMap parentClassId+    Just parentClassId -> parentClassId : getParentClasses shallowParentMap parentClassId  getParentClass :: Maybe Text                -> Word32@@ -161,8 +155,7 @@               (filter                  (\(_, _, cacheId, _) -> cacheId == parentCacheId)                  (filter-                    (\(maybeClassName, _, _, _) ->-                       maybeClassName == Just parentClassName)+                    (\(maybeClassName, _, _, _) -> maybeClassName == Just parentClassName)                     xs))))  parentClasses :: Map.Map Text Text@@ -171,28 +164,37 @@     stringToText     (Map.mapKeys stringToText (Map.fromList rawParentClasses)) -makeObjectMap :: List Text -> Bimap.Bimap Word32 Text+makeObjectMap :: List Text -> Map.Map Word32 Text makeObjectMap objects =-  Bimap.fromList (zip (map Word32 [0 ..]) (listValue objects))+  Map.fromAscList (zip (map Word32 [0 ..]) (listValue objects))  getObjectName :: ClassAttributeMap -> Word32 -> Maybe Text getObjectName classAttributeMap objectId =-  Bimap.lookup objectId (classAttributeMapObjectMap classAttributeMap)+  Map.lookup objectId (classAttributeMapObjectMap classAttributeMap)  getClassName :: Text -> Maybe Text-getClassName rawObjectName =-  Map.lookup (normalizeObjectName rawObjectName) objectClasses+getClassName rawObjectName = Map.lookup (normalizeObjectName rawObjectName) objectClasses  normalizeObjectName :: Text -> Text normalizeObjectName objectName =-  stringToText-    (replace-       "_[0-9]+$"-       ""-       (replace-          "^[A-Z_a-z0-9]+[.]TheWorld:"-          "TheWorld:"-          (textToString objectName)))+  let name = textValue objectName+      crowdActor = Text.pack "TheWorld:PersistentLevel.CrowdActor_TA"+      crowdManager = Text.pack "TheWorld:PersistentLevel.CrowdManager_TA"+      boostPickup = Text.pack "TheWorld:PersistentLevel.VehiclePickup_Boost_TA"+      mapScoreboard = Text.pack "TheWorld:PersistentLevel.InMapScoreboard_TA"+      toText text =+        Text+          (Int32 (fromIntegral (Text.length text + 1)))+          (Text.snoc text '\x00')+  in if Text.isInfixOf crowdActor name+       then toText crowdActor+       else if Text.isInfixOf crowdManager name+              then toText crowdManager+              else if Text.isInfixOf boostPickup name+                     then toText boostPickup+                     else if Text.isInfixOf mapScoreboard name+                            then toText mapScoreboard+                            else objectName  objectClasses :: Map.Map Text Text objectClasses =@@ -218,7 +220,7 @@                     -> Maybe Word getAttributeIdLimit classAttributeMap actorMap actorId = do   attributeMap <- getAttributeMap classAttributeMap actorMap actorId-  let streamIds = Bimap.keys attributeMap+  let streamIds = Map.keys attributeMap   let maxStreamId = maximum (Word32 0 : streamIds)   let limit = fromIntegral (word32Value maxStreamId)   pure limit@@ -231,15 +233,14 @@ getAttributeName classAttributeMap actorMap actorId streamId = do   attributeMap <- getAttributeMap classAttributeMap actorMap actorId   let key = Word32 (fromIntegral (compressedWordValue streamId))-  attributeId <- Bimap.lookup key attributeMap+  attributeId <- Map.lookup key attributeMap   let objectMap = classAttributeMapObjectMap classAttributeMap-  Bimap.lookup attributeId objectMap+  Map.lookup attributeId objectMap -getAttributeMap-  :: ClassAttributeMap-  -> ActorMap-  -> CompressedWord-  -> Maybe (Bimap.Bimap Word32 Word32)+getAttributeMap :: ClassAttributeMap+                -> ActorMap+                -> CompressedWord+                -> Maybe (Map.Map Word32 Word32) getAttributeMap classAttributeMap actorMap actorId = do   objectId <- Map.lookup actorId actorMap   objectName <- getObjectName classAttributeMap objectId
library/Rattletrap/ReplicationValue.hs view
@@ -1,15 +1,16 @@ module Rattletrap.ReplicationValue   ( module Rattletrap.ReplicationValue-  , module Export+  , module Rattletrap.ReplicationValue.Destroyed+  , module Rattletrap.ReplicationValue.Spawned+  , module Rattletrap.ReplicationValue.Updated   ) where -import Rattletrap.ReplicationValue.Destroyed as Export-import Rattletrap.ReplicationValue.Spawned as Export-import Rattletrap.ReplicationValue.Updated as Export- import Rattletrap.ActorMap import Rattletrap.ClassAttributeMap import Rattletrap.CompressedWord+import Rattletrap.ReplicationValue.Destroyed+import Rattletrap.ReplicationValue.Spawned+import Rattletrap.ReplicationValue.Updated  import qualified Data.Binary.Bits.Get as BinaryBit import qualified Data.Binary.Bits.Put as BinaryBit@@ -37,12 +38,7 @@             getSpawnedReplicationValue classAttributeMap actorMap actorId           pure (SpawnedReplication x, newActorMap)         else do-          x <--            getUpdatedReplicationValue-              version-              classAttributeMap-              actorMap-              actorId+          x <- getUpdatedReplicationValue version classAttributeMap actorMap actorId           pure (UpdatedReplication x, actorMap)     else do       x <- getDestroyedReplicationValue
library/Rattletrap/Utility.hs view
@@ -4,7 +4,6 @@ import qualified Data.Bits as Bits import qualified Data.ByteString.Lazy as ByteString import qualified Data.Word as Word-import qualified Text.Regex as Regex  getRemainingBits :: BinaryBit.BitGet [Bool] getRemainingBits = do@@ -24,10 +23,6 @@     [ bytes     , ByteString.replicate (fromIntegral size - ByteString.length bytes) 0x00     ]--replace :: String -> String -> String -> String-replace needle replacement haystack =-  Regex.subRegex (Regex.mkRegex needle) haystack replacement  reverseByte :: Word.Word8 -> Word.Word8 reverseByte byte =
rattletrap.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack  name:           rattletrap-version:        0.1.7+version:        0.2.0 synopsis:       Parse and generate Rocket League replays. description:    Rattletrap parses and generates Rocket League replays. category:       Game@@ -85,7 +85,6 @@     , bytestring >=0.10 && <0.11     , containers >=0.5 && <0.6     , data-binary-ieee754 >=0.4 && <0.5-    , regex-compat >=0.95 && <0.96     , text >=1.2 && <1.3     , vector >=0.11 && <0.12   exposed-modules: