about summary refs log tree commit diff stats
path: root/data/maps/the_impressive
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-09-08 13:44:45 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-09-08 13:44:45 -0400
commit0aa1b7c005edc97323f3e1cbbe591d9064a73475 (patch)
treefa8dba2fc0552e68dee1bb5a9c3cc956c31d0ceb /data/maps/the_impressive
parent55e5d0aa958c4ab9b4161743d28d924b60bf496d (diff)
downloadlingo2-archipelago-0aa1b7c005edc97323f3e1cbbe591d9064a73475.tar.gz
lingo2-archipelago-0aa1b7c005edc97323f3e1cbbe591d9064a73475.tar.bz2
lingo2-archipelago-0aa1b7c005edc97323f3e1cbbe591d9064a73475.zip
[Client] Handle cyan door behavior
Player still needs to leave and re-enter the map for "any double letter" value.
Diffstat (limited to 'data/maps/the_impressive')
0 files changed, 0 insertions, 0 deletions
eral.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
module Main where
  import Fallen.Point
  import Fallen.Tiles
  import Fallen.Map
  import Fallen.Map.Overworld
  import System.Random
  import UI.HSCurses.Curses
  
  -- main :: ()
  main = do
    m <- initOverworld
    initCurses
    keypad stdScr True
    echo False
    cursSet CursorInvisible
    startColor
    mainLoop (75,75) m
    endWin
  
  mainLoop player m = do
    render player m
    input <- getCh
    case input of
      KeyLeft -> moveIfPassable player m West
      KeyRight -> moveIfPassable player m East
      KeyUp -> moveIfPassable player m North
      KeyDown -> moveIfPassable player m South
      _ -> putStrLn "endgame"
  
  moveIfPassable player m dir = do
    let p' = stepInDirection player dir
    let t' = getTileAtPos m p'
    if t' `elem` passableTiles
      then mainLoop p' m
      else mainLoop player m
  
  -- render :: Point -> Map -> Window -> ()
  render (px,py) m = do
    (h,w) <- scrSize
    let viewportX = px - quot w 2
    let viewportY = py - quot h 2
    let viewport = [(x,y) | y <- [viewportY..viewportY+h-1], x <- [viewportX..viewportX+w-1]]
    let drawch = drawTile . getTileAtPos m
    let viewport_ = map (\p@(x,y) -> (p, drawch p)) viewport
    mapM_ (\((x,y),ch) -> mvAddCh (y-viewportY) (x-viewportX) ch) viewport_
    mvAddCh (py-viewportY) (px-viewportX) (toEnum $ fromEnum '@')
    refresh