module Rattletrap.Type.Attribute.Loadout where

import qualified Rattletrap.BitGet as BitGet
import qualified Rattletrap.BitPut as BitPut
import qualified Rattletrap.Schema as Schema
import qualified Rattletrap.Type.U32 as U32
import qualified Rattletrap.Type.U8 as U8
import qualified Rattletrap.Utility.Json as Json
import qualified Rattletrap.Utility.Monad as Monad

data Loadout = Loadout
  { Loadout -> U8
version :: U8.U8,
    Loadout -> U32
body :: U32.U32,
    Loadout -> U32
decal :: U32.U32,
    Loadout -> U32
wheels :: U32.U32,
    -- | Now known as "rocket boost".
    Loadout -> U32
rocketTrail :: U32.U32,
    Loadout -> U32
antenna :: U32.U32,
    Loadout -> U32
topper :: U32.U32,
    Loadout -> U32
unknown1 :: U32.U32,
    Loadout -> Maybe U32
unknown2 :: Maybe U32.U32,
    Loadout -> Maybe U32
engineAudio :: Maybe U32.U32,
    Loadout -> Maybe U32
trail :: Maybe U32.U32,
    Loadout -> Maybe U32
goalExplosion :: Maybe U32.U32,
     :: Maybe U32.U32,
    Loadout -> Maybe U32
unknown3 :: Maybe U32.U32,
    Loadout -> Maybe U32
unknown4 :: Maybe U32.U32,
    Loadout -> Maybe U32
unknown5 :: Maybe U32.U32,
    Loadout -> Maybe U32
unknown6 :: Maybe U32.U32
  }
  deriving (Loadout -> Loadout -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Loadout -> Loadout -> Bool
$c/= :: Loadout -> Loadout -> Bool
== :: Loadout -> Loadout -> Bool
$c== :: Loadout -> Loadout -> Bool
Eq, Int -> Loadout -> ShowS
[Loadout] -> ShowS
Loadout -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Loadout] -> ShowS
$cshowList :: [Loadout] -> ShowS
show :: Loadout -> String
$cshow :: Loadout -> String
showsPrec :: Int -> Loadout -> ShowS
$cshowsPrec :: Int -> Loadout -> ShowS
Show)

instance Json.FromJSON Loadout where
  parseJSON :: Value -> Parser Loadout
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
Json.withObject String
"Loadout" forall a b. (a -> b) -> a -> b
$ \Object
object -> do
    U8
version <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"version"
    U32
body <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"body"
    U32
decal <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"decal"
    U32
wheels <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"wheels"
    U32
rocketTrail <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"rocket_trail"
    U32
antenna <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"antenna"
    U32
topper <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"topper"
    U32
unknown1 <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown1"
    Maybe U32
unknown2 <- forall value.
FromJSON value =>
Object -> String -> Parser (Maybe value)
Json.optional Object
object String
"unknown2"
    Maybe U32
engineAudio <- forall value.
FromJSON value =>
Object -> String -> Parser (Maybe value)
Json.optional Object
object String
"engine_audio"
    Maybe U32
trail <- forall value.
FromJSON value =>
Object -> String -> Parser (Maybe value)
Json.optional Object
object String
"trail"
    Maybe U32
goalExplosion <- forall value.
FromJSON value =>
Object -> String -> Parser (Maybe value)
Json.optional Object
object String
"goal_explosion"
    Maybe U32
banner <- forall value.
FromJSON value =>
Object -> String -> Parser (Maybe value)
Json.optional Object
object String
"banner"
    Maybe U32
unknown3 <- forall value.
FromJSON value =>
Object -> String -> Parser (Maybe value)
Json.optional Object
object String
"unknown3"
    Maybe U32
unknown4 <- forall value.
FromJSON value =>
Object -> String -> Parser (Maybe value)
Json.optional Object
object String
"unknown4"
    Maybe U32
unknown5 <- forall value.
FromJSON value =>
Object -> String -> Parser (Maybe value)
Json.optional Object
object String
"unknown5"
    Maybe U32
unknown6 <- forall value.
FromJSON value =>
Object -> String -> Parser (Maybe value)
Json.optional Object
object String
"unknown6"
    forall (f :: * -> *) a. Applicative f => a -> f a
pure
      Loadout
        { U8
version :: U8
version :: U8
version,
          U32
body :: U32
body :: U32
body,
          U32
decal :: U32
decal :: U32
decal,
          U32
wheels :: U32
wheels :: U32
wheels,
          U32
rocketTrail :: U32
rocketTrail :: U32
rocketTrail,
          U32
antenna :: U32
antenna :: U32
antenna,
          U32
topper :: U32
topper :: U32
topper,
          U32
unknown1 :: U32
unknown1 :: U32
unknown1,
          Maybe U32
unknown2 :: Maybe U32
unknown2 :: Maybe U32
unknown2,
          Maybe U32
engineAudio :: Maybe U32
engineAudio :: Maybe U32
engineAudio,
          Maybe U32
trail :: Maybe U32
trail :: Maybe U32
trail,
          Maybe U32
goalExplosion :: Maybe U32
goalExplosion :: Maybe U32
goalExplosion,
          Maybe U32
banner :: Maybe U32
banner :: Maybe U32
banner,
          Maybe U32
unknown3 :: Maybe U32
unknown3 :: Maybe U32
unknown3,
          Maybe U32
unknown4 :: Maybe U32
unknown4 :: Maybe U32
unknown4,
          Maybe U32
unknown5 :: Maybe U32
unknown5 :: Maybe U32
unknown5,
          Maybe U32
unknown6 :: Maybe U32
unknown6 :: Maybe U32
unknown6
        }

instance Json.ToJSON Loadout where
  toJSON :: Loadout -> Value
toJSON Loadout
x =
    [(Key, Value)] -> Value
Json.object
      [ forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"version" forall a b. (a -> b) -> a -> b
$ Loadout -> U8
version Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"body" forall a b. (a -> b) -> a -> b
$ Loadout -> U32
body Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"decal" forall a b. (a -> b) -> a -> b
$ Loadout -> U32
decal Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"wheels" forall a b. (a -> b) -> a -> b
$ Loadout -> U32
wheels Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"rocket_trail" forall a b. (a -> b) -> a -> b
$ Loadout -> U32
rocketTrail Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"antenna" forall a b. (a -> b) -> a -> b
$ Loadout -> U32
antenna Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"topper" forall a b. (a -> b) -> a -> b
$ Loadout -> U32
topper Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown1" forall a b. (a -> b) -> a -> b
$ Loadout -> U32
unknown1 Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown2" forall a b. (a -> b) -> a -> b
$ Loadout -> Maybe U32
unknown2 Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"engine_audio" forall a b. (a -> b) -> a -> b
$ Loadout -> Maybe U32
engineAudio Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"trail" forall a b. (a -> b) -> a -> b
$ Loadout -> Maybe U32
trail Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"goal_explosion" forall a b. (a -> b) -> a -> b
$ Loadout -> Maybe U32
goalExplosion Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"banner" forall a b. (a -> b) -> a -> b
$ Loadout -> Maybe U32
banner Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown3" forall a b. (a -> b) -> a -> b
$ Loadout -> Maybe U32
unknown3 Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown4" forall a b. (a -> b) -> a -> b
$ Loadout -> Maybe U32
unknown4 Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown5" forall a b. (a -> b) -> a -> b
$ Loadout -> Maybe U32
unknown5 Loadout
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown6" forall a b. (a -> b) -> a -> b
$ Loadout -> Maybe U32
unknown6 Loadout
x
      ]

schema :: Schema.Schema
schema :: Schema
schema =
  String -> Value -> Schema
Schema.named String
"attribute-loadout" forall a b. (a -> b) -> a -> b
$
    [((Key, Value), Bool)] -> Value
Schema.object
      [ (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"version" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U8.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"body" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"decal" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"wheels" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"rocket_trail" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"antenna" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"topper" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown1" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown2" forall b c a. (b -> c) -> (a -> b) -> a -> c
. Schema -> Value
Schema.json forall a b. (a -> b) -> a -> b
$ Schema -> Schema
Schema.maybe Schema
U32.schema, Bool
False),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"engine_audio" forall b c a. (b -> c) -> (a -> b) -> a -> c
. Schema -> Value
Schema.json forall a b. (a -> b) -> a -> b
$ Schema -> Schema
Schema.maybe Schema
U32.schema, Bool
False),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"trail" forall b c a. (b -> c) -> (a -> b) -> a -> c
. Schema -> Value
Schema.json forall a b. (a -> b) -> a -> b
$ Schema -> Schema
Schema.maybe Schema
U32.schema, Bool
False),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"goal_explosion" forall b c a. (b -> c) -> (a -> b) -> a -> c
. Schema -> Value
Schema.json forall a b. (a -> b) -> a -> b
$ Schema -> Schema
Schema.maybe Schema
U32.schema, Bool
False),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"banner" forall b c a. (b -> c) -> (a -> b) -> a -> c
. Schema -> Value
Schema.json forall a b. (a -> b) -> a -> b
$ Schema -> Schema
Schema.maybe Schema
U32.schema, Bool
False),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown3" forall b c a. (b -> c) -> (a -> b) -> a -> c
. Schema -> Value
Schema.json forall a b. (a -> b) -> a -> b
$ Schema -> Schema
Schema.maybe Schema
U32.schema, Bool
False),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown4" forall b c a. (b -> c) -> (a -> b) -> a -> c
. Schema -> Value
Schema.json forall a b. (a -> b) -> a -> b
$ Schema -> Schema
Schema.maybe Schema
U32.schema, Bool
False),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown5" forall b c a. (b -> c) -> (a -> b) -> a -> c
. Schema -> Value
Schema.json forall a b. (a -> b) -> a -> b
$ Schema -> Schema
Schema.maybe Schema
U32.schema, Bool
False),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown6" forall b c a. (b -> c) -> (a -> b) -> a -> c
. Schema -> Value
Schema.json forall a b. (a -> b) -> a -> b
$ Schema -> Schema
Schema.maybe Schema
U32.schema, Bool
False)
      ]

bitPut :: Loadout -> BitPut.BitPut
bitPut :: Loadout -> BitPut
bitPut Loadout
loadoutAttribute =
  U8 -> BitPut
U8.bitPut (Loadout -> U8
version Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (Loadout -> U32
body Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (Loadout -> U32
decal Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (Loadout -> U32
wheels Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (Loadout -> U32
rocketTrail Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (Loadout -> U32
antenna Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (Loadout -> U32
topper Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (Loadout -> U32
unknown1 Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap U32 -> BitPut
U32.bitPut (Loadout -> Maybe U32
unknown2 Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap U32 -> BitPut
U32.bitPut (Loadout -> Maybe U32
engineAudio Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap U32 -> BitPut
U32.bitPut (Loadout -> Maybe U32
trail Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap U32 -> BitPut
U32.bitPut (Loadout -> Maybe U32
goalExplosion Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap U32 -> BitPut
U32.bitPut (Loadout -> Maybe U32
banner Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap U32 -> BitPut
U32.bitPut (Loadout -> Maybe U32
unknown3 Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap U32 -> BitPut
U32.bitPut (Loadout -> Maybe U32
unknown4 Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap U32 -> BitPut
U32.bitPut (Loadout -> Maybe U32
unknown5 Loadout
loadoutAttribute)
    forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap U32 -> BitPut
U32.bitPut (Loadout -> Maybe U32
unknown6 Loadout
loadoutAttribute)

bitGet :: BitGet.BitGet Loadout
bitGet :: BitGet Loadout
bitGet = forall a. String -> BitGet a -> BitGet a
BitGet.label String
"Loadout" forall a b. (a -> b) -> a -> b
$ do
  U8
version <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"version" BitGet U8
U8.bitGet
  U32
body <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"body" BitGet U32
U32.bitGet
  U32
decal <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"decal" BitGet U32
U32.bitGet
  U32
wheels <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"wheels" BitGet U32
U32.bitGet
  U32
rocketTrail <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"rocketTrail" BitGet U32
U32.bitGet
  U32
antenna <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"antenna" BitGet U32
U32.bitGet
  U32
topper <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"topper" BitGet U32
U32.bitGet
  U32
unknown1 <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown1" BitGet U32
U32.bitGet
  Maybe U32
unknown2 <-
    forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown2" forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a)
Monad.whenMaybe (U8 -> Word8
U8.toWord8 U8
version forall a. Ord a => a -> a -> Bool
>= Word8
11) BitGet U32
U32.bitGet
  Maybe U32
engineAudio <-
    forall a. String -> BitGet a -> BitGet a
BitGet.label String
"engineAudio" forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a)
Monad.whenMaybe (U8 -> Word8
U8.toWord8 U8
version forall a. Ord a => a -> a -> Bool
>= Word8
16) BitGet U32
U32.bitGet
  Maybe U32
trail <-
    forall a. String -> BitGet a -> BitGet a
BitGet.label String
"trail" forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a)
Monad.whenMaybe (U8 -> Word8
U8.toWord8 U8
version forall a. Ord a => a -> a -> Bool
>= Word8
16) BitGet U32
U32.bitGet
  Maybe U32
goalExplosion <-
    forall a. String -> BitGet a -> BitGet a
BitGet.label String
"goalExplosion" forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a)
Monad.whenMaybe (U8 -> Word8
U8.toWord8 U8
version forall a. Ord a => a -> a -> Bool
>= Word8
16) BitGet U32
U32.bitGet
  Maybe U32
banner <-
    forall a. String -> BitGet a -> BitGet a
BitGet.label String
"banner" forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a)
Monad.whenMaybe (U8 -> Word8
U8.toWord8 U8
version forall a. Ord a => a -> a -> Bool
>= Word8
17) BitGet U32
U32.bitGet
  Maybe U32
unknown3 <-
    forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown3" forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a)
Monad.whenMaybe (U8 -> Word8
U8.toWord8 U8
version forall a. Ord a => a -> a -> Bool
>= Word8
19) BitGet U32
U32.bitGet
  Maybe U32
unknown4 <-
    forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown4" forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a)
Monad.whenMaybe (U8 -> Word8
U8.toWord8 U8
version forall a. Ord a => a -> a -> Bool
>= Word8
22) BitGet U32
U32.bitGet
  Maybe U32
unknown5 <-
    forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown5" forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a)
Monad.whenMaybe (U8 -> Word8
U8.toWord8 U8
version forall a. Ord a => a -> a -> Bool
>= Word8
22) BitGet U32
U32.bitGet
  Maybe U32
unknown6 <-
    forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown6" forall a b. (a -> b) -> a -> b
$
      forall (m :: * -> *) a. Applicative m => Bool -> m a -> m (Maybe a)
Monad.whenMaybe (U8 -> Word8
U8.toWord8 U8
version forall a. Ord a => a -> a -> Bool
>= Word8
22) BitGet U32
U32.bitGet
  forall (f :: * -> *) a. Applicative f => a -> f a
pure
    Loadout
      { U8
version :: U8
version :: U8
version,
        U32
body :: U32
body :: U32
body,
        U32
decal :: U32
decal :: U32
decal,
        U32
wheels :: U32
wheels :: U32
wheels,
        U32
rocketTrail :: U32
rocketTrail :: U32
rocketTrail,
        U32
antenna :: U32
antenna :: U32
antenna,
        U32
topper :: U32
topper :: U32
topper,
        U32
unknown1 :: U32
unknown1 :: U32
unknown1,
        Maybe U32
unknown2 :: Maybe U32
unknown2 :: Maybe U32
unknown2,
        Maybe U32
engineAudio :: Maybe U32
engineAudio :: Maybe U32
engineAudio,
        Maybe U32
trail :: Maybe U32
trail :: Maybe U32
trail,
        Maybe U32
goalExplosion :: Maybe U32
goalExplosion :: Maybe U32
goalExplosion,
        Maybe U32
banner :: Maybe U32
banner :: Maybe U32
banner,
        Maybe U32
unknown3 :: Maybe U32
unknown3 :: Maybe U32
unknown3,
        Maybe U32
unknown4 :: Maybe U32
unknown4 :: Maybe U32
unknown4,
        Maybe U32
unknown5 :: Maybe U32
unknown5 :: Maybe U32
unknown5,
        Maybe U32
unknown6 :: Maybe U32
unknown6 :: Maybe U32
unknown6
      }