packages feed

venzone-1.1.0.1: src/Main.hs

{-# Language LambdaCase #-}

-- GPLv3, this and all the repo


module Main where

import Venzone
import Watcher

import Terminal.Game

import System.Environment      as E

-- todo [release] jr quest

main :: IO ()
main = E.getArgs >>= \case
         []                -> as >> normalMode
         ["--watch", fp]   -> as >> watchMode fp
         ["--record", fp]  -> as >> recordMode fp
         ["--narrate", fp] -> as >> narrateMode fp
         ["--help"]        -> displayHelp
         _                 -> putStrLn "Unrecognised option!" >>
                              displayHelp
    where
          as = assertTermDims (80, 24)


-----------
-- MODES --
-----------

normalMode :: IO ()
normalMode = errorPress $
               prepareVenzone >>= \gv ->
               playGame gv    >>
               return ()

-- record venzone playthrough
recordMode :: FilePath -> IO ()
recordMode fp = errorPress $
                  prepareVenzone   >>= \gv ->
                  recordGame gv fp >>
                  return ()

-- record venzone playthrough
narrateMode :: FilePath -> IO ()
narrateMode fp = errorPress $
                   prepareVenzone    >>= \gv ->
                   readRecord fp     >>= \es ->
                   narrateGame gv es >>
                   return ()


-----------------
-- ANCILLARIES --
-----------------

displayHelp :: IO ()
displayHelp = putStr . unlines $
    ["\nvenzone - an adventure in the Carnic Alps",
     "(C) 2019 Francesco Ariis - http://www.ariis.it",
     "released under the GNU General Public License v3",
     "",
     "To run the game, just type ./venzone (or venzone.exe if you",
     "use Windows).",
     "",
     "Options:",
     "--help                           Display this help.",
     "--watch path/to/story.vns        Watch mode: autoreload story",
     "                                 when file is saved.",
     "--record PATH                    Record mode: play the game",
     "                                 and save a record to PATH.",
     "--narrate PATH                   Play back a recorded game.",
     ""]