                   (rdesc/search state)
                   state))))
           (inc-time state))
+      ;; Swap places with party members
       (= (get (rw/npc-at-xy state target-x target-y) :in-party?) true)
         (-> state
           (assoc-in [:world :player :pos :x] target-x)

    (log/info "not collide?" (not (rw/collide? state target-x target-y {:include-npcs? false})))
    (log/info "not mounted-on-raft?" (not (rw/player-mounted-on-raft? state)))
    (cond
      (rp/player-paralyzed? state)
        (-> state
          (rc/append-log "You can not move (paralyzed).")
          inc-time)
      (and (not (rw/collide? state target-x target-y {:include-npcs? false}))
           (not (rw/player-mounted-on-raft? state)))
        (as-> state state
          (if (and (not (rv/xy-in-safe-zone? state target-x target-y))
                   (not= :fixed (get-in state [:world :places (rw/current-place-id state) :movement])))
            (move-outside-safe-zone state direction)
            state)
          (if (rw/npc-at-xy state target-x target-y)
            ;; collided with npc. Engage in combat.
            (let [npc (rw/npc-at-xy state target-x target-y)]
              (log/info "npc" npc)
              (rcombat/attack state [:world :player] (rnpc/npc->keys state npc)))
            (as-> state state
              (assoc-in state [:world :player :pos :x] target-x)
              (assoc-in state [:world :player :pos :y] target-y)
              (let [cell  (rw/get-cell state target-x target-y)

                                     (assoc-in [:pos :x] player-x)
                                     (assoc-in [:pos :y] player-y))
                                 npc))))
      ;; Passable water terrain and on raft?
      (and (not (rw/collide-in-water? state target-x target-y))
           (rw/player-mounted-on-raft? state))
        (as-> state state
