From f00dd30cad191bf53729fdedf66d49e9b539e19e Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Fri, 18 Jun 2021 16:07:39 -0400 Subject: feat(xanthous): Fistfighting builds knuckle calluses 2000 ticks after the character damages their fists by hitting something, the character now develops calluses on their fists (scaled by *how* damaged they've become) that reduce the chance of them receiving additional damage from hitting things - up to a max of 5, which prevents *all* damage from fistfighting. This is all tracked in a new "Knuckles" struct in a new "Body" struct on the character datatype, which manages stepping itself forward as part of the Brain impl on the character. Change-Id: Ica269f16fb340fb25900d2c77fbad32f10c00be2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3222 Reviewed-by: grfn Tested-by: BuildkiteCI --- users/grfn/xanthous/src/Xanthous/App.hs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'users/grfn/xanthous/src/Xanthous/App.hs') diff --git a/users/grfn/xanthous/src/Xanthous/App.hs b/users/grfn/xanthous/src/Xanthous/App.hs index fa4ef2d6a5c3..1e915a03fe05 100644 --- a/users/grfn/xanthous/src/Xanthous/App.hs +++ b/users/grfn/xanthous/src/Xanthous/App.hs @@ -362,10 +362,7 @@ attackAt pos = message msg msgParams entities . ix creatureID . positioned .= SomeEntity creature' - whenM (uses character $ isNothing . weapon) - $ whenM (chance (0.08 :: Float)) $ do - say_ ["combat", "fistSelfDamage"] - character %= Character.damage 1 + whenM (uses character $ isNothing . weapon) handleFists stepGame -- TODO weapon chr = chr ^? inventory . wielded . wieldedItems . wieldableItem @@ -377,6 +374,16 @@ attackAt pos = Nothing -> Messages.lookup ["combat", "hit", "fists"] + handleFists = do + damageChance <- use $ character . body . knuckles . to fistDamageChance + whenM (chance damageChance) $ do + damageAmount <- use $ character . body . knuckles . to fistfightingDamage + say_ [ "combat" , if damageAmount > 1 + then "fistExtraSelfDamage" + else "fistSelfDamage" ] + character %= Character.damage damageAmount + character . body . knuckles %= damageKnuckles + entityMenu_ :: (Comonad w, Entity entity) => [w entity] -- cgit 1.4.1