Allure-0.4.14: GameDefinition/Content/PlaceKind.hs
-- Copyright (c) 2008--2011 Andres Loeh, 2010--2014 Mikolaj Konarski
-- This file is a part of the computer game Allure of the Stars
-- and is released under the terms of the GNU Affero General Public License.
-- For license and copyright information, see the file LICENSE.
--
-- | Rooms, halls and passages for Allure of the Stars.
module Content.PlaceKind ( cdefs ) where
import Game.LambdaHack.Common.ContentDef
import Game.LambdaHack.Content.PlaceKind
cdefs :: ContentDef PlaceKind
cdefs = ContentDef
{ getSymbol = psymbol
, getName = pname
, getFreq = pfreq
, validate = validatePlaceKind
, content =
[rect, ruin, collapsed, collapsed2, collapsed3, collapsed4, pillar, pillarC, pillar3, lampPost, lampPost2, lampPost3, lampPost4, treeShade, treeShade2, treeShade3, oval, ovalFloor, ovalSquare, colonnade, colonnadeWide, maze, maze2, maze3, mazeBig, mazeBig2, mazeBig3, cells]
}
rect, ruin, collapsed, collapsed2, collapsed3, collapsed4, pillar, pillarC, pillar3, lampPost, lampPost2, lampPost3, lampPost4, treeShade, treeShade2, treeShade3, oval, ovalFloor, ovalSquare, colonnade, colonnadeWide, maze, maze2, maze3, mazeBig, mazeBig2, mazeBig3, cells :: PlaceKind
rect = PlaceKind -- Valid for any nonempty area, hence low frequency.
{ psymbol = 'r'
, pname = "room"
, pfreq = [("rogue", 100), ("ambush", 8)]
, prarity = [(1, 1)]
, pcover = CStretch
, pfence = FWall
, ptopLeft = ["."]
, poverride = []
}
ruin = PlaceKind
{ psymbol = 'R'
, pname = "ruin"
, pfreq = [("ambush", 17), ("battle", 100)]
, prarity = [(1, 1)]
, pcover = CStretch
, pfence = FWall
, ptopLeft = ["X"]
, poverride = []
}
collapsed = PlaceKind
{ psymbol = 'c'
, pname = "collapsed cavern"
, pfreq = [("noise", 1)]
, prarity = [(1, 1)]
, pcover = CStretch
, pfence = FNone
, ptopLeft = ["#"]
, poverride = [('#', "doorlessWallOver_#")]
}
collapsed2 = collapsed
{ pfreq = [("noise", 100), ("battle", 50)]
, ptopLeft = [ "XX#"
, "X##"
]
}
collapsed3 = collapsed
{ pfreq = [("noise", 200), ("battle", 50)]
, ptopLeft = [ "XXX#"
, "X###"
]
}
collapsed4 = collapsed
{ pfreq = [("noise", 400), ("battle", 200)]
, ptopLeft = [ "XXX#"
, "XXX#"
, "X###"
]
}
pillar = PlaceKind
{ psymbol = 'p'
, pname = "pillar room"
, pfreq = [("rogue", 1000)] -- larger rooms require support pillars
, prarity = [(1, 1)]
, pcover = CStretch
, pfence = FWall
, ptopLeft = [ "...."
, ".#.."
, "...."
, "...."
]
, poverride = []
}
pillarC = pillar
{ ptopLeft = [ ".#.."
, "#..."
, "...."
, "...."
]
}
pillar3 = pillar
{ ptopLeft = [ "&.#."
, "...."
, "#..."
, "...."
]
}
colonnade = PlaceKind
{ psymbol = 'c'
, pname = "colonnade"
, pfreq = [("rogue", 60)]
, prarity = [(1, 1)]
, pcover = CAlternate
, pfence = FFloor
, ptopLeft = [ ".#"
, "#."
]
, poverride = []
}
colonnadeWide = colonnade
{ pfence = FWall
, ptopLeft = [ ".."
, ".#"
]
}
lampPost = PlaceKind
{ psymbol = 'l'
, pname = "lamp post"
, pfreq = [("ambush", 30), ("battle", 10)]
, prarity = [(1, 1)]
, pcover = CVerbatim
, pfence = FNone
, ptopLeft = [ "X.X"
, ".O."
, "X.X"
]
, poverride = [('O', "lampPostOver_O")]
}
lampPost2 = lampPost
{ ptopLeft = [ "..."
, ".O."
, "..."
]
}
lampPost3 = lampPost
{ ptopLeft = [ "XX.XX"
, "X...X"
, "..O.."
, "X...X"
, "XX.XX"
]
}
lampPost4 = lampPost
{ ptopLeft = [ "X...X"
, "....."
, "..O.."
, "....."
, "X...X"
]
}
treeShade = PlaceKind
{ psymbol = 't'
, pname = "tree shade"
, pfreq = [("skirmish", 100)]
, prarity = [(1, 1)]
, pcover = CVerbatim
, pfence = FNone
, ptopLeft = [ "sss"
, "XOs"
, "XXs"
]
, poverride = [('O', "treeShadeOver_O"), ('s', "treeShadeOver_s")]
}
treeShade2 = treeShade
{ ptopLeft = [ "sss"
, "XOs"
, "Xss"
]
}
treeShade3 = treeShade
{ ptopLeft = [ "sss"
, "sOs"
, "XXs"
]
}
oval = PlaceKind
{ psymbol = 'o'
, pname = "oval room"
, pfreq = [("rogue", 1000)]
, prarity = [(1, 1)]
, pcover = CStretch
, pfence = FWall
, ptopLeft = [ "####.."
, "##...."
, "#....."
, "#....."
, "......"
, "......"
]
, poverride = []
}
ovalFloor = oval -- Without outer solid fence, visible from outside.
{ pfreq = [("rogue", 10000)]
, pfence = FFloor
, ptopLeft = [ "XXXX+#"
, "XX###."
, "X##..."
, "X#...."
, "+#...."
, "#....."
]
}
ovalSquare = ovalFloor
{ ptopLeft = [ "X###+"
, "##..."
, "#...."
, "#...."
, "+...."
]
}
maze = PlaceKind
{ psymbol = 'm'
, pname = "maze"
, pfreq = [("rogue", 20)]
, prarity = [(1, 1)]
, pcover = CStretch
, pfence = FNone
, ptopLeft = [ "#.#.##"
, "##.#.."
, "#.##.#"
, "#.#.#."
]
, poverride = []
}
maze2 = maze
{ ptopLeft = [ "###.##"
, ".###.."
, "..#..#"
, ".#..#."
]
}
maze3 = maze
{ ptopLeft = [ "###.##"
, ".##.#."
, "..##.#"
, ".#..#."
]
}
mazeBig = maze
{ pfreq = [("rogue", 1000)]
, ptopLeft = [ "#.#.##"
, ".#.#.."
, "#.&.##"
, ".#.#.."
, "#.#..#"
, "#.#.#."
]
}
mazeBig2 = mazeBig
{ ptopLeft = [ "##..##"
, "#.##.."
, ".#.###"
, ".##.#."
, "#.#&.#"
, "#.#.#."
]
}
mazeBig3 = mazeBig
{ ptopLeft = [ "##..##"
, "#.###."
, ".#...#"
, ".#.##."
, "##.#.#"
, "#.#.#."
]
}
cells = PlaceKind
{ psymbol = '#'
, pname = "cells"
, pfreq = [("rogue", 30)]
, prarity = [(1, 1)]
, pcover = CReflect
, pfence = FWall
, ptopLeft = [ "..#"
, "..#"
, "##."
]
, poverride = []
}
-- TODO: obtain all the rest as places nested within places.
-- 3 places are enough, with 1 or 2 tiles between places,
-- on all sides, only vertical, only horizontal,