From fb5bec8d952b57fe4afa0d842ee606cf4e548563 Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Fri, 18 Jun 2021 12:42:42 -0400 Subject: 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 Tested-by: BuildkiteCI --- .../xanthous/src/Xanthous/Entities/RawTypes.hs | 27 ++++++++++++++++++++-- .../src/Xanthous/Entities/Raws/gormlak.yaml | 9 ++++++-- .../xanthous/src/Xanthous/Entities/Raws/ooze.yaml | 3 +++ 3 files changed, 35 insertions(+), 4 deletions(-) (limited to 'users/grfn/xanthous/src/Xanthous/Entities') diff --git a/users/grfn/xanthous/src/Xanthous/Entities/RawTypes.hs b/users/grfn/xanthous/src/Xanthous/Entities/RawTypes.hs index ea5a90136e4e..b7c5fe31c995 100644 --- a/users/grfn/xanthous/src/Xanthous/Entities/RawTypes.hs +++ b/users/grfn/xanthous/src/Xanthous/Entities/RawTypes.hs @@ -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) diff --git a/users/grfn/xanthous/src/Xanthous/Entities/Raws/gormlak.yaml b/users/grfn/xanthous/src/Xanthous/Entities/Raws/gormlak.yaml index 8cddf85394a6..ad3d9cb147da 100644 --- a/users/grfn/xanthous/src/Xanthous/Entities/Raws/gormlak.yaml +++ b/users/grfn/xanthous/src/Xanthous/Entities/Raws/gormlak.yaml @@ -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 diff --git a/users/grfn/xanthous/src/Xanthous/Entities/Raws/ooze.yaml b/users/grfn/xanthous/src/Xanthous/Entities/Raws/ooze.yaml index d13b5881dfdc..fe427c94abf7 100644 --- a/users/grfn/xanthous/src/Xanthous/Entities/Raws/ooze.yaml +++ b/users/grfn/xanthous/src/Xanthous/Entities/Raws/ooze.yaml @@ -10,3 +10,6 @@ Creature: maxHitpoints: 3 speed: 100 friendly: false + attacks: + - description: slams into you + damage: 1 -- cgit 1.4.1