diff options
author | Griffin Smith <grfn@gws.fyi> | 2021-06-18T20·07-0400 |
---|---|---|
committer | grfn <grfn@gws.fyi> | 2021-06-18T21·17+0000 |
commit | f00dd30cad191bf53729fdedf66d49e9b539e19e (patch) | |
tree | ab99193890d6f49906d3bab2b2d4d21039c26ded /users/grfn/xanthous/src/Xanthous/App.hs | |
parent | 4d2402a64ec3ca28e87ebc264f2064f310ca68f5 (diff) |
feat(xanthous): Fistfighting builds knuckle calluses r/2676
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 <grfn@gws.fyi> Tested-by: BuildkiteCI
Diffstat (limited to 'users/grfn/xanthous/src/Xanthous/App.hs')
-rw-r--r-- | users/grfn/xanthous/src/Xanthous/App.hs | 15 |
1 files changed, 11 insertions, 4 deletions
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] |