diff options
| -rw-r--r-- | sequence.cabal | 1 | ||||
| -rw-r--r-- | sequence.nix | 10 | ||||
| -rw-r--r-- | src/Main.hs | 5 | ||||
| -rw-r--r-- | src/Sequence/Utils.hs | 8 |
4 files changed, 17 insertions, 7 deletions
diff --git a/sequence.cabal b/sequence.cabal index 931cba6..740a975 100644 --- a/sequence.cabal +++ b/sequence.cabal | |||
| @@ -39,5 +39,6 @@ executable sequence | |||
| 39 | , ansi-terminal | 39 | , ansi-terminal |
| 40 | , text | 40 | , text |
| 41 | , template | 41 | , template |
| 42 | , regex-compat | ||
| 42 | hs-source-dirs: src | 43 | hs-source-dirs: src |
| 43 | default-language: Haskell2010 \ No newline at end of file | 44 | default-language: Haskell2010 \ No newline at end of file |
diff --git a/sequence.nix b/sequence.nix index ae75127..e0d93b7 100644 --- a/sequence.nix +++ b/sequence.nix | |||
| @@ -1,8 +1,8 @@ | |||
| 1 | { mkDerivation, ansi-terminal, base, bimap, case-insensitive | 1 | { mkDerivation, ansi-terminal, base, bimap, case-insensitive |
| 2 | , containers, data-default, directory, filepath, game-probability | 2 | , containers, data-default, directory, filepath, game-probability |
| 3 | , lens, mtl, readline, Shellac, Shellac-haskeline, stdenv | 3 | , lens, mtl, readline, regex-compat, Shellac, Shellac-haskeline |
| 4 | , table-layout, template, text, transformers, transformers-base | 4 | , stdenv, table-layout, template, text, transformers |
| 5 | , xdg-basedir | 5 | , transformers-base, xdg-basedir |
| 6 | }: | 6 | }: |
| 7 | mkDerivation { | 7 | mkDerivation { |
| 8 | pname = "sequence"; | 8 | pname = "sequence"; |
| @@ -12,8 +12,8 @@ mkDerivation { | |||
| 12 | isExecutable = true; | 12 | isExecutable = true; |
| 13 | executableHaskellDepends = [ | 13 | executableHaskellDepends = [ |
| 14 | ansi-terminal base bimap case-insensitive containers data-default | 14 | ansi-terminal base bimap case-insensitive containers data-default |
| 15 | directory filepath game-probability lens mtl readline Shellac | 15 | directory filepath game-probability lens mtl readline regex-compat |
| 16 | Shellac-haskeline table-layout template text transformers | 16 | Shellac Shellac-haskeline table-layout template text transformers |
| 17 | transformers-base xdg-basedir | 17 | transformers-base xdg-basedir |
| 18 | ]; | 18 | ]; |
| 19 | license = stdenv.lib.licenses.mit; | 19 | license = stdenv.lib.licenses.mit; |
diff --git a/src/Main.hs b/src/Main.hs index 449e21d..de90b80 100644 --- a/src/Main.hs +++ b/src/Main.hs | |||
| @@ -297,6 +297,7 @@ entitySeqVal' ident = void . runMaybeT $ do | |||
| 297 | & set seqVal (Just sNum) | 297 | & set seqVal (Just sNum) |
| 298 | & set seqEpsilon (entity ^. eStats . sSeqEpsilon) | 298 | & set seqEpsilon (entity ^. eStats . sSeqEpsilon) |
| 299 | gEntities . at ident .= Just (newEntity & set eSeqVal val) | 299 | gEntities . at ident .= Just (newEntity & set eSeqVal val) |
| 300 | gLog <>= pure (ident, "Sequence: " ++ show sNum) | ||
| 300 | 301 | ||
| 301 | spendSeq :: Int -> String -> Sh GameState () | 302 | spendSeq :: Int -> String -> Sh GameState () |
| 302 | spendSeq n logStr = withFocus $ \focusId -> do | 303 | spendSeq n logStr = withFocus $ \focusId -> do |
| @@ -342,7 +343,7 @@ doShock dmg efLens = withFocus $ \focusId -> do | |||
| 342 | lStats . efLens . seApplied .= True | 343 | lStats . efLens . seApplied .= True |
| 343 | Effect (CI.original -> effectName) effect <- evalF . table $ cripple ^. seEffect | 344 | Effect (CI.original -> effectName) effect <- evalF . table $ cripple ^. seEffect |
| 344 | lStats <~ (MaybeT . fmap join . runMaybeT $ evalF effect) | 345 | lStats <~ (MaybeT . fmap join . runMaybeT $ evalF effect) |
| 345 | lift $ shellPutStrLn effectName | 346 | lift . outputLogged focusId $ "Effect: " ++ effectName |
| 346 | lift . addNote $ "Effect: " ++ effectName | 347 | lift . addNote $ "Effect: " ++ effectName |
| 347 | 348 | ||
| 348 | takeHit :: Int -> Completable (Set Hitzone) -> Completable DamageType -> Sh GameState () | 349 | takeHit :: Int -> Completable (Set Hitzone) -> Completable DamageType -> Sh GameState () |
| @@ -355,7 +356,7 @@ takeHit dmg a1 a2 = flip withArg a1 $ \zones -> flip withArg a2 $ \dType -> with | |||
| 355 | dmg' <- MaybeT . focusState lStats . evalFormula' [name] $ absorb armor dType dmg | 356 | dmg' <- MaybeT . focusState lStats . evalFormula' [name] $ absorb armor dType dmg |
| 356 | forM_ (Map.toList dmg') $ \(dType, dmg) -> lift . runMaybeT $ do | 357 | forM_ (Map.toList dmg') $ \(dType, dmg) -> lift . runMaybeT $ do |
| 357 | guard $ dmg > 0 | 358 | guard $ dmg > 0 |
| 358 | lift $ shellPutStrLn $ name ++ " took " ++ show dmg ++ " " ++ show dType | 359 | lift . outputLogged focusId $ name ++ " took " ++ show dmg ++ " " ++ show dType |
| 359 | case dType of | 360 | case dType of |
| 360 | Fatigue -> lStats . sFatigue += dmg | 361 | Fatigue -> lStats . sFatigue += dmg |
| 361 | _ -> lStats . sDamage . ix zone += dmg | 362 | _ -> lStats . sDamage . ix zone += dmg |
diff --git a/src/Sequence/Utils.hs b/src/Sequence/Utils.hs index 1d34a4f..fbf3c7d 100644 --- a/src/Sequence/Utils.hs +++ b/src/Sequence/Utils.hs | |||
| @@ -4,6 +4,7 @@ module Sequence.Utils | |||
| 4 | ( withArg, withFocus, withFocus' | 4 | ( withArg, withFocus, withFocus' |
| 5 | , focusState | 5 | , focusState |
| 6 | , toName, toDesc | 6 | , toName, toDesc |
| 7 | , outputLogged | ||
| 7 | , Argument(..) | 8 | , Argument(..) |
| 8 | , Completion(..) | 9 | , Completion(..) |
| 9 | , module Sequence.Utils.Ask | 10 | , module Sequence.Utils.Ask |
| @@ -47,6 +48,8 @@ import Sequence.Utils.Ask | |||
| 47 | import Sequence.Contact.Types | 48 | import Sequence.Contact.Types |
| 48 | import Sequence.Formula | 49 | import Sequence.Formula |
| 49 | 50 | ||
| 51 | import Text.Regex (mkRegex, subRegex) | ||
| 52 | |||
| 50 | class Argument a st | a -> st where | 53 | class Argument a st | a -> st where |
| 51 | arg :: String -> Sh st (Maybe a) | 54 | arg :: String -> Sh st (Maybe a) |
| 52 | 55 | ||
| @@ -85,6 +88,11 @@ toDesc ident = do | |||
| 85 | Just dmg -> return $ name ++ " " ++ show dmg | 88 | Just dmg -> return $ name ++ " " ++ show dmg |
| 86 | Nothing -> return name | 89 | Nothing -> return name |
| 87 | 90 | ||
| 91 | outputLogged :: EntityIdentifier -> String -> Sh GameState () | ||
| 92 | outputLogged id str = gLog <>= pure (id, clean str) >> shellPutStrLn str | ||
| 93 | where | ||
| 94 | clean str = subRegex (mkRegex "(\x9B|\x1B\\[)[0-?]*[ -/]*[@-~]") str "" -- remove ANSI escapes | ||
| 95 | |||
| 88 | instance Completion EntityIdentifier GameState where | 96 | instance Completion EntityIdentifier GameState where |
| 89 | completableLabel _ = "<entity>" | 97 | completableLabel _ = "<entity>" |
| 90 | complete _ st prefix = return . filter ((isPrefixOf `on` CI.foldCase) prefix) . map ((evalState ?? st) . toName) . Map.keys $ st ^. gEntities | 98 | complete _ st prefix = return . filter ((isPrefixOf `on` CI.foldCase) prefix) . map ((evalState ?? st) . toName) . Map.keys $ st ^. gEntities |
