packages feed

SpacePrivateers-0.1.0.0: GameDefinition/Content/RuleKind.hs

{-# LANGUAGE TemplateHaskell #-}
-- | Game rules and assorted game setup data for Space Privateer.
module Content.RuleKind ( cdefs ) where

import Language.Haskell.TH.Syntax
import System.FilePath

-- Cabal
import qualified Paths_SpacePrivateers as Self (getDataFileName, version)

import Game.LambdaHack.Common.ContentDef
import Game.LambdaHack.Common.Vector
import Game.LambdaHack.Content.RuleKind

cdefs :: ContentDef RuleKind
cdefs = ContentDef
  { getSymbol = rsymbol
  , getName = rname
  , getFreq = rfreq
  , validate = validateRuleKind
  , content =
      [standard]
  }

standard :: RuleKind
standard = RuleKind
  { rsymbol        = 's'
  , rname          = "standard Space Privateers ruleset"
  , rfreq          = [("standard", 100)]
  , raccessible    = Nothing
  , raccessibleDoor =
      Just $ \spos tpos -> not $ isDiagonal $ spos `vectorToFrom` tpos
  , rtitle         = "Space Privateers"
  , rpathsDataFile = Self.getDataFileName
  , rpathsVersion  = Self.version
  , rcfgUIName = "config.ui"
  , rcfgUIDefault = $(do
      let path = "GameDefinition" </> "config.ui" <.> "default"
      qAddDependentFile path
      x <- qRunIO (readFile path)
      lift x)
  , rmainMenuArt = $(do
      let path = "GameDefinition/MainMenu.ascii"
      qAddDependentFile path
      x <- qRunIO (readFile path)
      lift x)
  , rfirstDeathEnds = False
  , rfovMode = Digital
  , rsaveBkpClips = 500
  , rleadLevelClips = 100
  , rscoresFile = "scores"
  , rsavePrefix = "save"
  , rsharedStash = True
  }