LambdaHack-0.1.20110918: src/ActorKind.hs
module ActorKind where
import Data.Binary
import Control.Monad
import Geometry
import Random
import qualified Color
-- | Monster properties that are changing rarely and permanently.
data ActorKind = ActorKind
{ bhpMin :: !Int, -- ^ minimal initial hp
bhpMax :: !Int, -- ^ maximal possible and initial hp
bspeed :: !Time, -- ^ natural speed
bsymbol :: !Char, -- ^ map symbol
bcolor :: !Color.Color, -- ^ map color
bname :: String, -- ^ name
bsight :: !Bool, -- ^ can it see?
bsmell :: !Bool, -- ^ can it smell?
biq :: !Int, -- ^ intelligence
bregen :: !Int, -- ^ regeneration interval
bfreq :: !Int -- ^ dungeon frequency
}
deriving (Show, Eq)
instance Binary ActorKind where
put (ActorKind nhpMin nhpMax nsp nsym ncol nnm nsi nsm niq nreg nfreq) =
do
put nhpMin
put nhpMax
put nsp
put nsym
put ncol
put nnm
put nsi
put nsm
put niq
put nreg
put nfreq
get = do
nhpMin <- get
nhpMax <- get
nsp <- get
nsym <- get
ncol <- get
nnm <- get
nsi <- get
nsm <- get
niq <- get
nreg <- get
nfreq <- get
return (ActorKind nhpMin nhpMax nsp nsym ncol nnm nsi nsm niq nreg nfreq)
-- | The list of kinds of monsters that appear randomly throughout the dungeon.
dungeonMonsters :: [ActorKind]
dungeonMonsters = [eye, fastEye, nose]
hero, eye, fastEye, nose :: ActorKind
hero = ActorKind
{ bhpMin = 50,
bhpMax = 50,
bspeed = 10,
bsymbol = '@',
bname = "you",
bcolor = Color.BrWhite, -- Heroes white, monsters colorful.
bsight = True,
bsmell = False,
biq = 13, -- Can see secret doors under alien control.
bregen = 1500,
bfreq = 0
}
eye = ActorKind
{ bhpMin = 1, -- falls in 1--4 unarmed rounds
bhpMax = 12,
bspeed = 10,
bsymbol = 'e',
bcolor = Color.BrRed,
bname = "the reducible eye",
bsight = True,
bsmell = False,
biq = 8,
bregen = 1500,
bfreq = 6
}
fastEye = ActorKind
{ bhpMin = 1, -- falls in 1--2 unarmed rounds
bhpMax = 6,
bspeed = 4,
bsymbol = 'e',
bcolor = Color.BrBlue,
bname = "the super-fast eye",
bsight = True,
bsmell = False,
biq = 12,
bregen = 1500,
bfreq = 1
}
nose = ActorKind
{ bhpMin = 6, -- 2--5 and in 1 round of the strongest sword
bhpMax = 13,
bspeed = 11,
bsymbol = 'n',
bcolor = Color.Green,
bname = "the point-free nose",
bsight = False,
bsmell = True,
biq = 0,
bregen = 1500,
bfreq = 2
}