feat(xanthous): Add configurable natural attacks

Allow configuring the natural attacks (eg, part of their body rather
than an item) of a creature. Each attack has a description and a damage
associated with it.

Change-Id: I69698a8ac4ee2da91e4c88e419593627519522a5
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3220
Reviewed-by: grfn <grfn@gws.fyi>
Tested-by: BuildkiteCI
This commit is contained in:
Griffin Smith 2021-06-18 12:42:42 -04:00 committed by grfn
parent 88b0d0eecc
commit fb5bec8d95
7 changed files with 69 additions and 12 deletions

View file

@ -13,6 +13,8 @@ module Xanthous.Entities.RawTypes
-- ** Language
, LanguageName(..)
, getLanguage
-- ** Attacks
, Attack(..)
-- * Items
, ItemType(..)
@ -25,6 +27,7 @@ module Xanthous.Entities.RawTypes
, isWieldable
-- * Lens classes
, HasAttacks(..)
, HasAttackMessage(..)
, HasChar(..)
, HasDamage(..)
@ -52,6 +55,7 @@ import Xanthous.Data (TicksPerTile, Hitpoints)
import Xanthous.Data.EntityChar
import Xanthous.Util.QuickCheck
import Xanthous.Generators.Speech (Language, gormlak, english)
import Xanthous.Orphans ()
--------------------------------------------------------------------------------
-- | Identifiers for languages that creatures can speak.
@ -73,6 +77,23 @@ getLanguage :: LanguageName -> Language
getLanguage Gormlak = gormlak
getLanguage English = english
-- | Natural attacks for creature types
data Attack = Attack
{ -- | the @{{creature}}@ @{{description}}@
_description :: !Message
-- | Damage dealt
, _damage :: !Hitpoints
}
deriving stock (Show, Eq, Ord, Generic)
deriving anyclass (NFData, CoArbitrary, Function)
deriving Arbitrary via GenericArbitrary Attack
deriving (ToJSON, FromJSON)
via WithOptions '[ FieldLabelModifier '[Drop 1]
, OmitNothingFields 'True
]
Attack
makeFieldsNoPrefix ''Attack
data CreatureType = CreatureType
{ _name :: !Text
, _description :: !Text
@ -81,8 +102,10 @@ data CreatureType = CreatureType
, _friendly :: !Bool
, _speed :: !TicksPerTile
, _language :: !(Maybe LanguageName)
, _sayVerb :: !(Maybe Text) -- ^ The verb, in present tense, for when the
-- creature says something
, -- | The verb, in present tense, for when the creature says something
_sayVerb :: !(Maybe Text)
, -- | The creature's natural attacks
_attacks :: !(NonNull (Vector Attack))
}
deriving stock (Show, Eq, Ord, Generic)
deriving anyclass (NFData, CoArbitrary, Function)

View file

@ -2,8 +2,8 @@ Creature:
name: gormlak
description: a gormlak
longDescription: |
A chittering imp-like creature with bright yellow horns. It adores shiny objects
and gathers in swarms.
A chittering imp-like creature with bright yellow horns and sharp claws. It
adores shiny objects and gathers in swarms.
char:
char: g
style:
@ -13,3 +13,8 @@ Creature:
friendly: false
language: Gormlak
sayVerb: yells
attacks:
- description:
- claws you
- slashes you with its claws
damage: 1

View file

@ -10,3 +10,6 @@ Creature:
maxHitpoints: 3
speed: 100
friendly: false
attacks:
- description: slams into you
damage: 1