about summary refs log tree commit diff
path: root/users/grfn/xanthous/src/Xanthous/App.hs
diff options
context:
space:
mode:
authorGriffin Smith <grfn@gws.fyi>2022-05-14T15·49-0400
committerclbot <clbot@tvl.fyi>2022-05-14T16·02+0000
commitaf31da8cfc9caee8c2cd44df5ee5c1ed3a9b3ed7 (patch)
treedaaa748bfd7e9fb57aac37b1f2213fbef378b343 /users/grfn/xanthous/src/Xanthous/App.hs
parent194007b02069d2be0c283825aa1e1a4426b641a2 (diff)
feat(grfn/xanthous): Use dual-wielding to calculate damage r/4073
When dual-wielding weapons, do damage from both weapons and use both
weapons' attack messages.

Change-Id: I3c404946d0167c9b5c2bcf58ab5c3429cc5269fc
Reviewed-on: https://cl.tvl.fyi/c/depot/+/5605
Autosubmit: grfn <grfn@gws.fyi>
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
Diffstat (limited to 'users/grfn/xanthous/src/Xanthous/App.hs')
-rw-r--r--users/grfn/xanthous/src/Xanthous/App.hs25
1 files changed, 15 insertions, 10 deletions
diff --git a/users/grfn/xanthous/src/Xanthous/App.hs b/users/grfn/xanthous/src/Xanthous/App.hs
index 4ae549d159..426230cdc2 100644
--- a/users/grfn/xanthous/src/Xanthous/App.hs
+++ b/users/grfn/xanthous/src/Xanthous/App.hs
@@ -467,19 +467,24 @@ attackAt pos =
   attackCreature creature = do
     charDamage <- uses character characterDamage
     creature' <- damageCreature creature charDamage
-    msg <- uses character getAttackMessage
-    unless (Creature.isDead creature')
-      . message msg $ object ["creature" A..= creature']
+    unless (Creature.isDead creature') $ writeAttackMessage creature'
     whenM (uses character $ isNothing . weapon) handleFists
     stepGame
   weapon chr = chr ^? inventory . wielded . wieldedItems . wieldableItem
-  getAttackMessage chr =
-    case weapon chr of
-      Just wi ->
-        fromMaybe (Messages.lookup ["combat", "hit", "generic"])
-        $ wi ^. attackMessage
-      Nothing ->
-        Messages.lookup ["combat", "hit", "fists"]
+  writeAttackMessage creature = do
+    let params = object ["creature" A..= creature]
+    attackMessages <- uses character getAttackMessages
+    msg <- intercalate " and " <$> for attackMessages (`Messages.render` params)
+    writeMessage $ "You " <> msg
+  getAttackMessages chr =
+    case chr ^.. inventory . wielded . wieldedItems . wieldableItem of
+      [] -> [Messages.lookup ["combat", "hit", "fists"]]
+      is ->
+        is
+        <&> \wi ->
+              fromMaybe (Messages.lookup ["combat", "hit", "generic"])
+              $ wi ^. attackMessage
+
 
   handleFists = do
     damageChance <- use $ character . body . knuckles . to fistDamageChance