Allure-0.4.4: src/Content/ItemKind.hs
-- Copyright (c) 2008--2011 Andres Loeh, 2010--2012 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.
--
-- | Weapons and treasure for Allure of the Stars.
module Content.ItemKind ( cdefs ) where
import qualified Data.List as L
import Game.LambdaHack.Color
import qualified Game.LambdaHack.Content as Content
import Game.LambdaHack.Effect
import Game.LambdaHack.Flavour
import Game.LambdaHack.Random
import Game.LambdaHack.Content.ItemKind
cdefs :: Content.CDefs ItemKind
cdefs = Content.CDefs
{ getSymbol = isymbol
, getName = iname
, getFreq = ifreq
, validate = ivalidate
, content =
[necklace, dart, gem1, gem2, gem3, gold, javelin, kitchenKnife, potion1, potion2, potion3, ring, scroll1, scroll2, scroll3, sword, wand, fist, foot, tentacle, weight]
}
necklace, dart, gem1, gem2, gem3, gold, javelin, kitchenKnife, potion1, potion2, potion3, ring, scroll1, scroll2, scroll3, sword, wand, fist, foot, tentacle, weight :: ItemKind
gem, potion, scroll :: ItemKind -- generic templates
-- rollDeep (aDb, xDy) = rollDice aDb + lvl * rollDice xDy / depth
{- Item group symbols (from Angband, only as an informal convention for now):
! potion, flask, concoction, bottle, jar, vial, canister
? scroll, book, note, tablet, remote
, food
- magical wand, magical rod, transmitter, pistol, rifle
_ magical staff, scanner
= ring
" necklace
$ gold, gem
~ light, tool
/ polearm
| edged weapon
\ hafted weapon
} launcher
{ projectile
( clothes
[ torso armour
] misc. armour
) shield
-}
necklace = ItemKind
{ isymbol = '"'
, iname = "necklace"
, ifreq = [("dng", 6)]
, iflavour = zipFancy [BrGreen]
, ieffect = Regeneration
, icount = intToDeep 1
, ipower = (RollDice 2 3, RollDice 1 10)
, iverbApply = "tear down"
, iverbProject = "cast"
, iweight = 30
, itoThrow = -50 -- not dense enough
}
dart = ItemKind
{ isymbol = '{'
, iname = "billiard ball"
, ifreq = [("dng", 30)]
, iflavour = zipPlain [BrWhite]
, ieffect = Wound (RollDice 1 1)
, icount = (RollDice 3 3, RollDice 0 0)
, ipower = intToDeep 0
, iverbApply = "splinter"
, iverbProject = "hurl"
, iweight = 50
, itoThrow = 0 -- a cheap dart
}
gem = ItemKind
{ isymbol = '$'
, iname = "precious gem"
, ifreq = [("dng", 20)] -- x3, but rare on shallow levels
, iflavour = zipPlain $ L.delete BrYellow brightCol -- natural, so not fancy
, ieffect = NoEffect
, icount = intToDeep 0
, ipower = intToDeep 0
, iverbApply = "crush"
, iverbProject = "toss"
, iweight = 50
, itoThrow = 0
}
gem1 = gem
{ icount = (RollDice 0 0, RollDice 1 1) -- appears on max depth
}
gem2 = gem
{ icount = (RollDice 0 0, RollDice 1 2) -- appears halfway, doubled on max
}
gem3 = gem
{ icount = (RollDice 0 0, RollDice 1 3)
}
gold = ItemKind
{ isymbol = '$'
, iname = "gold coin"
, ifreq = [("dng", 80)]
, iflavour = zipPlain [BrYellow]
, ieffect = NoEffect
, icount = (RollDice 0 0, RollDice 10 10)
, ipower = intToDeep 0
, iverbApply = "grind"
, iverbProject = "toss"
, iweight = 31
, itoThrow = 0
}
javelin = ItemKind
{ isymbol = '{'
, iname = "javelin"
, ifreq = [("dng", 30)]
, iflavour = zipPlain [Brown]
, ieffect = Wound (RollDice 1 2)
, icount = (RollDice 0 0, RollDice 1 1)
, ipower = (RollDice 1 1, RollDice 2 2)
, iverbApply = "break up"
, iverbProject = "hurl"
, iweight = 2000
, itoThrow = 0 -- cheap but deadly
}
kitchenKnife = ItemKind
{ isymbol = '{'
, iname = "kitchen knife"
, ifreq = [("dng", 30)]
, iflavour = zipPlain [BrCyan]
, ieffect = Wound (RollDice 1 1)
, icount = (RollDice 0 0, RollDice 1 2)
, ipower = (RollDice 0 0, RollDice 1 2)
, iverbApply = "bend"
, iverbProject = "throw"
, iweight = 200
, itoThrow = -50 -- too flexible and the handle causes air resistance
}
potion = ItemKind
{ isymbol = '!'
, iname = "vial"
, ifreq = [("dng", 15)]
, iflavour = zipFancy stdCol
, ieffect = NoEffect
, icount = intToDeep 1
, ipower = intToDeep 0
, iverbApply = "gulp down"
, iverbProject = "lob"
, iweight = 200
, itoThrow = -50 -- oily, bad grip
}
potion1 = potion
{ ifreq = [("dng", 5)]
, ieffect = ApplyPerfume
}
potion2 = potion
{ ieffect = Heal
, ipower = (RollDice 5 1, RollDice 0 0)
}
potion3 = potion
{ ifreq = [("dng", 5)]
, ieffect = Wound (RollDice 0 0)
, ipower = (RollDice 5 1, RollDice 0 0)
}
ring = ItemKind
{ isymbol = '='
, iname = "ring"
, ifreq = [("dng", 10)]
, iflavour = zipPlain [White]
, ieffect = Searching
, icount = intToDeep 1
, ipower = (RollDice 1 6, RollDice 3 2)
, iverbApply = "squeeze down"
, iverbProject = "toss"
, iweight = 15
, itoThrow = 0
}
scroll = ItemKind
{ isymbol = '?'
, iname = "tablet"
, ifreq = [("dng", 6)]
, iflavour = zipFancy darkCol -- arcane and old
, ieffect = NoEffect
, icount = intToDeep 1
, ipower = intToDeep 0
, iverbApply = "dial"
, iverbProject = "lob"
, iweight = 700
, itoThrow = -25 -- bad grip
}
scroll1 = scroll
{ ieffect = SummonFriend
}
scroll2 = scroll
{ ifreq = [("dng", 3)]
, ieffect = SummonEnemy
}
scroll3 = scroll
{ ieffect = Descend
}
sword = ItemKind
{ isymbol = '/'
, iname = "sharpened pipe"
, ifreq = [("dng", 60)]
, iflavour = zipPlain [Cyan]
, ieffect = Wound (RollDice 3 1)
, icount = intToDeep 1
, ipower = (RollDice 1 2, RollDice 4 2)
, iverbApply = "hit"
, iverbProject = "heave"
, iweight = 3000
, itoThrow = -25 -- bad grip
}
wand = ItemKind
{ isymbol = '-'
, iname = "injector"
, ifreq = [("dng", 15)]
, iflavour = zipFancy [BrRed]
, ieffect = Dominate
, icount = intToDeep 1
, ipower = intToDeep 0
, iverbApply = "snap"
, iverbProject = "zap"
, iweight = 300
, itoThrow = 25 -- jet
}
fist = sword
{ isymbol = '@'
, iname = "fist"
, ifreq = [("unarmed", 100)]
, iverbApply = "punch"
, iverbProject = "ERROR, please report: iverbProject fist"
}
foot = sword
{ isymbol = '@'
, iname = "foot"
, ifreq = [("unarmed", 50)]
, iverbApply = "kick"
, iverbProject = "ERROR, please report: iverbProject foot"
}
tentacle = sword
{ isymbol = 'S'
, iname = "tentacle"
, ifreq = [("monstrous", 100)]
, iverbApply = "hit"
, iverbProject = "ERROR, please report: iverbProject tentacle"
}
weight = sword
{ isymbol = '@'
, iname = "power jump"
, ifreq = [("weight", 100)]
, ieffect = Wound (RollDice 99 99)
, ipower = (RollDice 1 99, RollDice 0 0)
, iverbApply = "squash"
, iverbProject = "ERROR, please report: iverbProject weight"
}